一般在写自定义控件之前都要考虑一下原来的控件(系统代的)有什么优缺点,有哪些功能是我想要的,但是自带的控件没有提供,或者提供的不是太理想。
那么对于 下拉列表框 我个人感觉有几个地方用着不是太方便。
1、绑定数据库。
当下拉列表框里的数据需要从数据库里提取的时候,就需要设置DataValueField 和 DataTextField 的属性,每次用的时候都要设置一下,这个比较烦。
(不好意思,我比较懒)
我的方法是在自定义控件的OnInit 时间里面加上
Me.CssClass = "lst"
Me.DataValueField = "ID"
Me.DataTextField = "txt"
Me.Font.Size = FontUnit.Point(9)
这就方便多了,只是在写SQL语句的时候需要使用别名的方式,修改字段的名称,以便适应 ID和txt。
如果您不喜欢这种方式的话,可以略过。:)
2、设置选定的选项。
在修改数据的时候,往往需要根据已经保存的数据来设置下拉列表框的第几个选项是被选中的,以便于修改。(不知道我有没有说清楚,表达能力还有待提高。)
当然系统的下拉列表框提供了这个功能,
Me.Items.FindByText("125").Selected = True
Me.SelectedValue = "125";
其他方法略。
可以用这种几方法来设置,但是这里有一个共同小问题,就是当下拉列表框的item里面没有“125” 的时候会抛出异常。
对于框架来说这么做没有什么问题,但是对于客户就不好了。
当然这个是可以避免的,一是检查是否出现异常,要不就是确保数据是完整的,绝对不会出现这种在item里面找不到值的情况。
但是我比较懒,不像写太多的代码来预防这些事情。
我写了一个 SetSelectedByValue (ByVal listValue As String) 的方法来设置,这样就方便多了。
3、添加月份、日期等信息。
如果需要写一个下拉列表框,这个框里面要放置12个月份,还要写个循环或者在.aspx里面设置。我设了一个偷懒的方法。
4、其他的常用的填充方法。
您可以把您常用的填充的数据放在自定义控件里面,调用的时候就会方便很多。
5、验证。
这个和 文本框是一样的,也是使用正则的方式来验证。这里主要验证是否选择了一个选项。
比如:第一个item是“请选择”,而这个下拉列表框又必须有一个选项(当然不能选第一个了),这个时候就需要验证一下。
6、实现接口
和文本框一样实现了下面的几个接口
属性(接口):
ControlKind 返回控件的类型。
函数(接口):
GetValue() 获取文本框的值,默认返回 TextTrim
GetValue(ByVal kind As String) 根据 kind 获取对应的文本框的值。
SetValue(ByVal value As String) 给文本框赋值
SetValue(ByVal value As String, ByVal kind As String)给文本框赋值
好像有点乱,感兴趣的话看看下面的代码吧。