您是如何添加数据呢?方便吗?好修改吗,对于扩展又是怎么样的呢?大家一起来聊聊如何?

下载地址:


大家是怎么处理CRUD的呢?


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


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


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


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


    1、自己描绘控件,比如能够自己添加文本框、下拉列表框这一类的控件。

    2、可以自己获取用户输入的信息,进行验证(前台的js验证和后台的数据的类型是否符合子段类型的验证),组合SQL语句或者调用存储过程来添加、修改数据。

    3、在修改数据的时候,可以从数据库里提取数据,填充到对应的控件里。


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


    1、05的需要另外设置文本框这样的控件。

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


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


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


    1、先定义一个结构(好像也可以使用类)。

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

    3、取值,保存数据。

    4、修改的时候显示数据。


    [具体实现]

    1、先定义一个结构(好像也可以使用类)。

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件[Serializable()] public struct ControlInfos

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        /// 字段名称

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        public string ColSysName;   

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        /// 中文名称

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        public string ColName;

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

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

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        public string ControlKind;

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        /// 描述信息

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        public string ColInfo;

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

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件 protected override void CreateChildControls()

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            base.CreateChildControls();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            ShowData();

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件 public string ShowData()

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            foreach (ControlInfos info in this.CtrlInfo)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                switch (info.ControlKind)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                    case "201":     //单行文本框

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        TextBox txt = new TextBox();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        txt.ID = "c_" + info.ColSysName ;

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(new LiteralControl(info.ColName ));

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(txt);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(new LiteralControl("

"));

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                    case "205":     //下拉列表框

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        DropDownList lst = new DropDownList();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        lst.ID = "c_" + info.ColSysName;

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        //lst.Items.Clear();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        lst.Items.Add(new ListItem("测试项目1", "1"));

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        lst.Items.Add(new ListItem("测试项目2", "2"));

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(new LiteralControl(info.ColName));

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(lst);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        this.Controls.Add(new LiteralControl("

"));

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

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

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

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

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

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

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

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

    3、取值,保存数据。

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件public string SaveDate()

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            //调用数据访问函数库来保存数据

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            ControlInfos[] info = this.CtrlInfo;

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            string[] str1 = new string[info.Length];

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            string[] str = new string[info.Length];

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            for (int i = 0; i < info.Length; i++)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                str1[i] = info[i].ColSysName;

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                switch (info[i].ControlKind)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                    case "201":

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        TextBox txt = new TextBox();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        txt = (TextBox)this.FindControl("c_" + info[i].ColSysName);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        str[i] = txt.Text.Trim().Replace("'","");

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                    case "205":

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        DropDownList lst = new DropDownList();

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        lst = (DropDownList)this.FindControl("c_" + info[i].ColSysName);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                        str[i] = lst.SelectedValue ;

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

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

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            //测试输出

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            for (int i = 0; i < info.Length; i++)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                base.Page.Response.Write(str1[i]);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                base.Page.Response.Write(":");

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                base.Page.Response.Write(str[i]);

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07                base.Page.Response.Write("

");

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

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

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

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

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

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

    4、修改的时候显示数据。

        这个部分还没有写呢,不过也是类似的方法。

    5、调用。

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件protected void Page_Load(object sender, EventArgs e)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        Response.Cache.SetNoStore();

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        //设置控件的属性

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        if (!Page.IsPostBack)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            ControlInfos[] info = new ControlInfos[2];

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[0].ColSysName = "NewsName";

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[0].ColName = "新闻标题";

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[0].ControlKind = "201";

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[1].ColSysName = "NewsKind";

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[1].ColName = "新闻分类";

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            info[1].ControlKind = "205";

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07            this.myForm.CtrlInfo = info;

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

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

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件    protected void Button1_Click(object sender, EventArgs e)

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

能自己“跑”的表单控件,思路,雏形,源码。vs2005版本_表单控件_07        myForm.SaveDate();

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


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


    1、case 。对控件判断的地方使用了case ,目前也没有其他的更好的方法。

    2、case 里面的代码。这里只是两种控件,最简单的代码,就已经好几行了,多了就不可想象了。虽然case 没有什么办法解决,但是case 里的代码,可以使用接口的方式来分散开。

        就是定义一个接口,在继承系统的控件(比如文本框)实现这个接口,然后表单控件里case的代码就可以简化很多了。

    3、调用的时候需要设置一个结构数组,这个是很烦的,代码行数也是很多的,好像还没有直接设置控件(文本框等)来得方便。对于这一点,我是把这些属性放在了一个配置文件(xml或者数据库)里面,然后在表单控件内部读取属性,自己就可以幅值了,外部只需要设置一个“编号”就可以了(告诉控件读取哪些信息)。