在GridView列中动态创建几个CheckBox(升级篇)

想了解此篇,Insus.NET建议网友们先看这篇《http://www.cnblogs.com/insus/archive/2013/04/23/3035447.html》,因为此篇是那篇的基础上进行升级的。
说实的,上一篇只是完成了基本的功能,怎样把字符串进行分割,并绑定至GridView的自定义模版上,最后的是处理用户选择的选项处理与存储在数据库中,还是在网页再次加载时,把上次选择的选项显示于checkBoxList控件内。
这算不上是动态创建CheckBox。
因此,在此次Insus.NET再使用另外完全不一样的方法,来实现这个相同的功能,也算得上重构了。

将要显示CheckBox的列,将使用用户控件(ASCX)来替代。没有看错吧? 是的,没有看错,Insus.NET将创建一个用户控件来替代那一列。
使用用户控件,需要考虑一些问题,GridView怎与用户控件互动,因为需要显示数据,还是存储用户选择的数据。其实以前Insus.NET实现的,全是网页与用户控件互动,还是头一次尝试GridView与用户控件互动。

如果你想看看是怎样实现,可以继续往下看,因为还是较特别的方法。

Ok,我们创建一个用户控件在站点上MyInfo.ascx,Html页很简单,只是拉放了一个CheckBoxLrist控件。


在MyInfo.ascx.cs中,首先宣告两个私有变量,下图中的第11和12行代码,一个是CheckBoxList的数据源,另一个是用户选择的数据。

上图中,第22行代码,就是如果_DataSource转换为字符串之后的长度小于等于0的话,将为处理以后的代码,即返回跳过。
第24行代码,是CheckBoxList绑定的方法,还是就是第28行代码是把用户选择的数据绑定至CheckBoxList控件内上。

接下来,我们先看CheckBoxlistParse()方法:

 第34行代码,是计算Split之后,共有多少组数据,把这个值赋给CheckBoxList的RepeatColumns属性。

另一个方法CheckBoxlistBind(),这个方法是把用户选择的选项重新绑定至CheckBoxList控件上。CheckBoxList的Item是否是选择的,可以Selected()方法反映出来。

上图高亮的方法,可参考下图:


Ok, Insus.NET会把复杂的方法拆分更细小的方法,可从前一篇看到原版复杂的方法,整段处理的流程均写在一个方法内,日后很难维护的。

用户控件写好了,把它拉入 GridView控件中:

 

现在用户控件算是整合入GridView控件了,通讯是个问题。接口来解决,是Insus.NET惯用的方法。下面接口:

接口有二个方法和一个函数,前二者将为GridView传值给用户控件,而函数将是用户控件给网页的OnClick事件服务。这个接口是为用户控件实作之用。

 

上面用户控件实现接口,应该是写得简单明了。我们再打开.aspx.cs代码,看看和事件怎样改写:

 

第36行是找到用户控件,并转为接口,因为前面我们已经把用户控件实作了接口,此时当然后可以转换对象为接口。然后把两个值分别赋值接口定义好的两个方法。
第48行代码也是一样的理解,而51行代码,就是获取用户控件传过来的值。

Ok,写完了,望你能有所收获。

 

posted @ 2013-04-24 01:13  Insus.NET  阅读(5567)  评论(2编辑  收藏  举报