C#实现动态添加用户控件
2010-05-14 11:41
375 查看
在项目即将上线的时候,发现项目中动态生成的"多选下拉框控件"存在一个功能上的问题。
需要实现功能:
1、该控件跟据树节点生成,也就是说选择不同的树节点会生成多个不同的"多选下拉框控件"、不同的子控件下拉数据和不同初始选项。
2、该控件作为查询条件控件,所以子控件编号必须己经确定,我们需要通过子控件控件编号及选择项去查询数据。
如图:
//codeTypeNoCollections 类别集合
foreach (string codeTypeNo in codeTypeNoCollections)
{
Control control = Page.LoadControl("~/UserControls/UclIndexAttribute.ascx");
((UclIndexAttribute)control).ID = codeTypeNo;
}
我们确定用代码类编码(codeTypeNo)做为子控件名称。
也就是说当查询事件或者其它事件触发,我们需要重新生成控件,因为新生成控件的子控件ID和原子控件ID相同,所以会加载原子控件数据及原选择项。
这个时候问题就出来了,当树选项发生改变,也可能会生成相同ID的子控件,这个不满足要求,我们需要的是当树选项发生改变时重新初始化控件,包括子控件数据及选择项。
我首先想到的是当树选项发生改变,清空控件缓存,按照这个思路在控件里鼓捣了半天,将就着搞定了。
但是总觉得这样不好,这问题应该很简单,后来决定给子控件ID命名为代码类编码+"_"+树选项编码,也就是树选顶改变,属性编号肯定改变;
一个这样的问题搞了几个小时,真是浪费时间。
需要实现功能:
1、该控件跟据树节点生成,也就是说选择不同的树节点会生成多个不同的"多选下拉框控件"、不同的子控件下拉数据和不同初始选项。
2、该控件作为查询条件控件,所以子控件编号必须己经确定,我们需要通过子控件控件编号及选择项去查询数据。
如图:
//codeTypeNoCollections 类别集合
foreach (string codeTypeNo in codeTypeNoCollections)
{
Control control = Page.LoadControl("~/UserControls/UclIndexAttribute.ascx");
((UclIndexAttribute)control).ID = codeTypeNo;
}
我们确定用代码类编码(codeTypeNo)做为子控件名称。
也就是说当查询事件或者其它事件触发,我们需要重新生成控件,因为新生成控件的子控件ID和原子控件ID相同,所以会加载原子控件数据及原选择项。
这个时候问题就出来了,当树选项发生改变,也可能会生成相同ID的子控件,这个不满足要求,我们需要的是当树选项发生改变时重新初始化控件,包括子控件数据及选择项。
我首先想到的是当树选项发生改变,清空控件缓存,按照这个思路在控件里鼓捣了半天,将就着搞定了。
但是总觉得这样不好,这问题应该很简单,后来决定给子控件ID命名为代码类编码+"_"+树选项编码,也就是树选顶改变,属性编号肯定改变;
一个这样的问题搞了几个小时,真是浪费时间。
相关文章推荐
- C#和VB 在动态添加用户控件时, 不一样啊。。。
- C#实现动态添加和删除控件
- asp.net中用C#实现站点计数器用户控件
- ASP.NET动态添加用户控件的方法
- C#动态添加控件(数组控件)
- AngularJS:实现动态添加输入控件功能(转)
- C# :实现水印与图片合成,并利用Graphics 压缩图像质量 , (委托实现listBox的动态添加提示)
- C#写的对系统用户和组操作的类(可以实现用户和组的添加、删除、修改)
- [c#.net]做tooltip给控件动态添加属性的做法、IExtenderProvider接口的使用
- LayoutInflater 和LayoutParams一起实现动态添加控件
- c#给用户控件添加事件处理程序
- ASP.NET动态添加用户控件的方法
- 【WPF】C#代码动态添加控件的Margin属性
- [c#.net]做tooltip给控件动态添加属性的做法、IExtenderProvider接口的使用
- c#动态设置combobox控件下拉项宽度以实现下拉项文字可以完全显示。
- arcengine cliasic code(转)基于ArcGIS Engine + C#实现用户自定义动态电力符号
- 动态添加用户控件和服务器控件(二)
- C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加
- android 动态添加控件并实现每个子控件的点击事件
- asp.net 动态添加多个用户控件