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

简介: 下载地址: http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html 大家是怎么处理CRUD的呢?这里说一下添加、修改数据。    一大堆的表,n多的字段,经常变化的表现形式(比如文本框换成下拉列表框等),是不是很头痛?反正我是很烦的,因为我太懒了,对于这种不是太重要的,但是有很繁琐的东东,我总是要向出来一种“简单”的方式来处理。

下载地址
 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或者数据库)里面,然后在表单控件内部读取属性,自己就可以幅值了,外部只需要设置一个“编号”就可以了(告诉控件读取哪些信息)。


相关文章
|
1月前
|
JavaScript
面试官:组件库按需注册加载的实现思路是什么?
【10月更文挑战第6天】面试官:组件库按需注册加载的实现思路是什么?
|
3月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
292 0
|
3月前
|
Java 开发者 JavaScript
Struts 2 开发者的秘籍:隐藏的表单标签库功能,能否成为你下个项目的大杀器?
【8月更文挑战第31天】Struts 2表单标签库是提升Web页面交互体验的神器。它提供丰富的标签,如`&lt;s:textfield&gt;`和`&lt;s:select&gt;`,简化表单元素创建与管理,支持数据验证和动态选项展示。结合示例代码,如创建文本输入框并与Action类属性绑定,显著提升开发效率和用户体验。通过自定义按钮样式等功能,Struts 2表单标签库让开发者更专注于业务逻辑实现。
47 0
|
JavaScript 前端开发 Java
前端项目里常见的十种报错及其解决办法
前端项目里常见的十种报错及其解决办法
309 0
|
存储 小程序 算法
【易售小程序项目】小程序首页完善(滑到底部数据翻页、回到顶端、基于回溯算法的两列数据高宽比平衡)【后端基于若依管理系统开发】
【易售小程序项目】小程序首页完善(滑到底部数据翻页、回到顶端、基于回溯算法的两列数据高宽比平衡)【后端基于若依管理系统开发】
96 0
|
安全 vr&ar
游戏看广告盒子系统开发案例设计/功能详解/方案需求/逻辑项目/源码稳定版
function permit( address owner, address spender, uint256 value, uint256 deadline,
|
运维 前端开发 Python
brython | 笨办法写个连连看-1.核心功能实现
brython | 笨办法写个连连看-1.核心功能实现
124 1
|
Web App开发 JSON JavaScript
仅20+行核心代码的Chrome插件,这不是有手就行吗?(上)
大家好,我是零一,不知道你们有没有开发过Chrome插件,但你们一定用得很多。其实Chrome插件的开发一点都不麻烦,基本就是有手就行,一个功能极简的插件核心代码也就不过30行左右。那你还怕不会插件的开发吗? 本文将手把手(真 · 手把手)介绍Chrome插件的开发,并末尾附带一个插件实战教学
396 0
仅20+行核心代码的Chrome插件,这不是有手就行吗?(上)
|
JSON JavaScript 数据可视化
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)