能自己“跑”的表单控件,思路,雏形,源码。vs2005版本

下载地址:
 http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html

大家是怎么处理CRUD的呢?

这里说一下添加、修改数据。

    一大堆的表,n多的字段,经常变化的表现形式(比如文本框换成下拉列表框等),是不是很头痛?反正我是很烦的,因为我太懒了,对于这种不是太重要的,但是有很繁琐的东东,我总是要向出来一种“简单”的方式来处理。

    怎么办?表单控件,我还一直使用VS2003,没有VS2005里面的表单控件,所以只好自己写了,另外好像VS2005里面的表单控件使用的也不是很多。

    我的表单控件要做的事情:

    1、自己描绘控件,比如能够自己添加文本框、下拉列表框这一类的控件。
    2、可以自己获取用户输入的信息,进行验证(前台的js验证和后台的数据的类型是否符合子段类型的验证),组合SQL语句或者调用存储过程来添加、修改数据。
    3、在修改数据的时候,可以从数据库里提取数据,填充到对应的控件里。

    这个好像和05的表单控件差不多,不过有两个明显的区别。

    1、05的需要另外设置文本框这样的控件。
    2、使用DataSource这一类的控件来保存关联信息,而这些信息都是通过属性的方式设置,而且默认情况下是放在了aspx文件里面了。

    对于第一点呢,操作繁琐,当然也是很灵活;第二点嘛,就不好了。一两个页面的话,还好办,如果有100个这样的页面的话,那管理就是一个问题了。

    那么怎么实现我想要的效果呢,我采用自定义控件的方式来实现。

    1、先定义一个结构(好像也可以使用类)。
    2、根据属性添加子控件,也就是具体的控件(比如文本框、下拉列表框等)。
    3、取值,保存数据。
    4、修改的时候显示数据。

    [具体实现]
    1、先定义一个结构(好像也可以使用类)。


[Serializable()] public struct ControlInfos
    {
        /**//// <summary>
        /// 字段名称
        /// </summary>
        public string ColSysName;   

        /**//// <summary>
        /// 中文名称
        /// </summary>
        public string ColName;
        
        /**//// <summary>
        /// 控件类别
        /// </summary>
        public string ControlKind;
        
        /**//// <summary>
        /// 描述信息
        /// </summary>
        public string ColInfo;

    }

    2、根据属性添加子控件,也就是具体的控件(比如文本框、下拉列表框等)。


 protected override void CreateChildControls()
        {
            base.CreateChildControls();
            ShowData();
        }
 public string ShowData()
        {
            foreach (ControlInfos info in this.CtrlInfo)
            {
                switch (info.ControlKind)
                {
                    case "201":     //单行文本框
                        TextBox txt = new TextBox();
                        txt.ID = "c_" + info.ColSysName ;
                        this.Controls.Add(new LiteralControl(info.ColName ));
                        this.Controls.Add(txt);
                        this.Controls.Add(new LiteralControl("<BR>"));
                        break;

                    case "205":     //下拉列表框
                        DropDownList lst = new DropDownList();
                        lst.ID = "c_" + info.ColSysName;
                        //lst.Items.Clear();
                        lst.Items.Add(new ListItem("测试项目1", "1"));
                        lst.Items.Add(new ListItem("测试项目2", "2"));
                       
                        this.Controls.Add(new LiteralControl(info.ColName));
                        this.Controls.Add(lst);
                        this.Controls.Add(new LiteralControl("<BR>"));
                        break;

                }
            }

            return "";

        }

    3、取值,保存数据。


public string SaveDate()
        {
            //调用数据访问函数库来保存数据
            ControlInfos[] info = this.CtrlInfo;

            string[] str1 = new string[info.Length];
            string[] str = new string[info.Length];
            for (int i = 0; i < info.Length; i++)
            {
                str1[i] = info[i].ColSysName;

                switch (info[i].ControlKind)
                {
                    case "201":
                        TextBox txt = new TextBox();
                        txt = (TextBox)this.FindControl("c_" + info[i].ColSysName);
                        str[i] = txt.Text.Trim().Replace("'","");
                        break;

                    case "205":
                        DropDownList lst = new DropDownList();
                        lst = (DropDownList)this.FindControl("c_" + info[i].ColSysName);
                        str[i] = lst.SelectedValue ;
                        break;
                }
            }

            //测试输出
            for (int i = 0; i < info.Length; i++)
            {
                base.Page.Response.Write(str1[i]);
                base.Page.Response.Write(":");
                base.Page.Response.Write(str[i]);
                base.Page.Response.Write("<BR>");

            }

            return "";

        }

    4、修改的时候显示数据。
        这个部分还没有写呢,不过也是类似的方法。
    5、调用。

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.SetNoStore();

        //设置控件的属性
        if (!Page.IsPostBack)
        {
            ControlInfos[] info = new ControlInfos[2];
            info[0].ColSysName = "NewsName";
            info[0].ColName = "新闻标题";
            info[0].ControlKind = "201";

            info[1].ColSysName = "NewsKind";
            info[1].ColName = "新闻分类";
            info[1].ControlKind = "205";

            this.myForm.CtrlInfo = info;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        myForm.SaveDate();
    }

    缺点。说到缺点嘛,由于这里只是一个雏形,所以缺点是很多的,但是这里写的就是一个“核心”代码,关键代码都在这里面。其他的就是在这个基础上去完善、扩展、优化和美化 。

    1、case 。对控件判断的地方使用了case ,目前也没有其他的更好的方法。
    2、case 里面的代码。这里只是两种控件,最简单的代码,就已经好几行了,多了就不可想象了。虽然case 没有什么办法解决,但是case 里的代码,可以使用接口的方式来分散开。
        就是定义一个接口,在继承系统的控件(比如文本框)实现这个接口,然后表单控件里case的代码就可以简化很多了。
    3、调用的时候需要设置一个结构数组,这个是很烦的,代码行数也是很多的,好像还没有直接设置控件(文本框等)来得方便。对于这一点,我是把这些属性放在了一个配置文件(xml或者数据库)里面,然后在表单控件内部读取属性,自己就可以幅值了,外部只需要设置一个“编号”就可以了(告诉控件读取哪些信息)。

时间: 2024-09-13 05:01:17

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本的相关文章

表单控件的副产品——查询控件

查询控件 温故而知新能自己"跑"的表单控件,思路,雏形,源码.vs2005版本 表单控件续(1)--应用接口来简化和分散代码     当初在写表单控件的时候,突然想到,这个表单控件稍微修改一下不就是一个查询控件了吗?     那么查询控件需要做的什么事情呢?          1.自己描绘控件,比如能够自己添加文本框.下拉列表框这一类的控件.          2.可以自己获取用户输入的信息,根据查询方式组合where 后面的 SQL语句 .     是不是和表单控件很像呢?     

【思路】表单控件和查询控件,整理一下思路。

       这回不分页了,改成添加修改数据了.您是如何添加数据的呢?使用ORM.LinQ..net2.0新增加的FormView + SqlDataSource,还是其他?我还是喜欢自己动手丰衣足食.自己做一个表单控件来玩玩.        以前也写了几个关于表单控件的 post : 1.表单控件续(1)--应用接口来简化和分散代码 2.能自己"跑"的表单控件,思路,雏形,源码.vs2005版本          我简单的看了一下FormView + SqlDataSource的方式

表单控件续(1)——应用接口来简化和分散代码

上次有点仓促,有几个地方没有明确. 1.两篇随笔可以合在一起看能自己"跑"的表单控件,思路,雏形,源码.vs2005版本 我写项目的步骤.抛砖引玉.   后者是整个流程,前者是其中的一个步骤,是一个简单的思路说明,其中前三段代码都是表单控件里面的. 2.我要写的是一个表单控件,b/s结构里面的控件.虽然内部会有点复杂,但是编译成dll后,调用就会很方便了. 上一篇里的表单控件有很多需要完善的地方,这里先说一下扩展性.       扩展呢就是说可以比较方便的添加更多的子控件,而现在的表单

假乱真的表单控件:美化原生表单控件

文章描述:这样的模拟需要在兼顾实现设计的同时,还要保证网站的性能和可用性.这时我不禁开始怀念那些看起来平凡却非常实用的原生表单控件.如果用他们几乎可以解决以上所有问题. 在互联网成熟的今天,大家对网站的要求不仅仅在功能实现上,也开始注重视觉设计,多终端用户体验等等.表单控件是web页面上重要的组成元素,具有非常高的功能性.交互设计师为它设计更加方便的操作方式,视觉设计师也会绞尽脑汁设计出更加夺人眼球的视觉展现.可是由于表单控件自身的局限性,不能很好地自定义外表,所以就诞生了一系列的由聪明的前端同

ASP.NET中的XML表单控件

asp.net|xml|控件 导 读:介绍了有关ASP.NET中XML控件的使用,有个小BUG:在WEBFORM.ASPX中出现的XML控件,其中的transformsource属性设定了样式表文件路径,可是在文章出处没有找到这个XSL文件.:( 自己解决吧. --------------------------------------------------------------------------------在这个代码中揭示了微软在ASP.NET架构中隐藏的一个WEB表单控件,即<as

ASP入门教程-使用输入型表单控件

为了让用户通过表单输入数据,可以使用INPUT标记创建各种表单控件,通过将INPUT标记的TYPE属性设置为不同的值,可以创建不同类型的输入型表单控件. 1.单行文本框,格式如下: 一)格式: <form name="表单的名称" method="get | post" action="URL"> <input type="text" name="字符串" value="字符串&

ASP入门教程-使用其他表单控件

除了使用INPUT标记创建输入型表单控件外,也可以使用TEXTAREA标记创建多行文本框,或使用SELECT标记创建选项选单,还可以使用FIELDSET标记以表单中的控件进行分组. 1.在表单中使用多行文本框控件 一)格式: <form name="表单的名称" method="get | post" action="URL"> <TEXTAREA name="字符串" ROWS="整数"

excel2013如何插入表单控件

  excel2013插入表单控件的方法: 插入表单步骤1:先看下效果,下面是两个调查表单,左边使用的是单选按钮,右边使用的是复选按钮. 插入表单步骤2:插入表单控件是在开发工具选项卡下,该选项卡不在默认主选项卡,需要添加该选项卡.在 文件->选项->自定义功能区,勾选开发工具 插入表单步骤3:回到表格,即看到多了一个开发工具选项卡, 选择开发工具->插入->表单控件->分组框. 插入表单步骤4:将分组框重命名为"你的职业" 插入表单步骤5:再选择开发工具

php通过隐藏表单控件获取到前两个页面的url

  自己在学习过程中也遇到了类似的问题: 比如,后台是想做成这样子的: 但是实际则是这样的: 解决方法: 通过隐藏表单控件         <input type="hidden" name="prevurl" value="<?php echo $_SERVER['HTTP_REFERER']?>"> 这样$_SERVER['HTTP_REFERER']的值看上去就暂时存到了$_POST[prevurl]里. 其实这个方