摘要
承上篇「扩展 CheckBoxList 控件 - 系结复选项目」中以整数值来描述复选项目,本文将以另一种方式,利用 Item 的 Value 或 Text 属性来描述复选项目,每个被勾选的项目,会将其 Value 或 Text 属性值,以逗点分隔的方式被记录下来。例如
选项一.Value = 1
选项二.Value = 2
选项三.Value = 3
选项四.Value = 4
当复选了「选项一」及「选项三」,则复选值为 "1,3"。当复选了「选项二」及「选项四」,则复选值为 "2,4"。若要使用上述的方式来描述复选项目,一般要自行撰写程序代码来处理。本文将扩展 CheckBoxList 控件,直接透过属性来双向系结这个复选值。

扩展 CheckBoxList 控件
继承 CheckBoxList 命名为 TBCheckBoxList,新增 SelectedValueList属性,来描述目复选的 Value 值(以逗号分隔),新增 SelectedTextList 属性,来描述项目复选的 Text 值(以逗号分隔)。

  1Imports System.Web.UI.WebControls
  2Imports System.ComponentModel
  3Imports System.Text
  4
  5Namespace WebControls
  6    Public Class TBCheckBoxList
  7        Inherits CheckBoxList
  8
  9        ''' <summary>
 10        ''' 项目复选的 Value 值,以逗号分隔每个项目。
 11        ''' </summary>

 12        < _
 13        Description("项目复选的 Value 值,以逗号分隔每个项目。"), _
 14        Bindable(True), _
 15        Browsable(False) _
 16        > _
 17        Public Property SelectedValueList() As String
 18            Get
 19                Return GetSelectedValueList()
 20            End Get
 21            Set(ByVal value As String)
 22                SetSelectedValueList(value)
 23            End Set
 24        End Property

 25
 26        ''' <summary>
 27        ''' 取得项目复选的 Value 值。
 28        ''' </summary>

 29        Private Function GetSelectedValueList() As String
 30            Dim oValues As StringBuilder
 31            Dim oItem As ListItem
 32
 33            oValues = New StringBuilder()
 34            For Each oItem In Me.Items
 35                If oItem.Selected Then
 36                    If oValues.Length > 0 Then oValues.Append(",")
 37                    oValues.Append(oItem.Value)
 38                End If
 39            Next
 40            Return oValues.ToString()
 41        End Function

 42
 43        ''' <summary>
 44        ''' 设定项目复选的 Value 值。
 45        ''' </summary>
 46        ''' <param name="Value">复选 Value 值。</param>

 47        Private Sub SetSelectedValueList(ByVal Value As String)
 48            Dim oValues() As String
 49            Dim sValue As String
 50            Dim oItem As ListItem
 51
 52            Me.ClearSelection()
 53            oValues = Split(Value, ",")
 54            For Each sValue In oValues
 55                oItem = Me.Items.FindByValue(sValue)
 56                If oItem IsNot Nothing Then
 57                    oItem.Selected = True
 58                End If
 59            Next
 60        End Sub

 61
 62        ''' <summary>
 63        ''' 项目复选的 Text 值,以逗号分隔每个项目。
 64        ''' </summary>

 65        < _
 66        Description("项目复选的 Text 值,以逗号分隔每个项目。"), _
 67        Bindable(True), _
 68        Browsable(False) _
 69        > _
 70        Public Property SelectedTextList() As String
 71            Get
 72                Return GetSelectedTextList()
 73            End Get
 74            Set(ByVal value As String)
 75                SetSelectedTextList(value)
 76            End Set
 77        End Property

 78
 79        ''' <summary>
 80        ''' 取得项目复选的 Text 值。
 81        ''' </summary>

 82        Private Function GetSelectedTextList() As String
 83            Dim oValues As StringBuilder
 84            Dim oItem As ListItem
 85
 86            oValues = New StringBuilder()
 87            For Each oItem In Me.Items
 88                If oItem.Selected Then
 89                    If oValues.Length > 0 Then oValues.Append(",")
 90                    oValues.Append(oItem.Text)
 91                End If
 92            Next
 93            Return oValues.ToString()
 94        End Function

 95
 96        ''' <summary>
 97        ''' 设定项目复选的 Text 值。
 98        ''' </summary>
 99        ''' <param name="Value">复选 Text 值。</param>

100        Private Sub SetSelectedTextList(ByVal Value As String)
101            Dim oValues() As String
102            Dim sValue As String
103            Dim oItem As ListItem
104
105            Me.ClearSelection()
106            oValues = Split(Value, ",")
107            For Each sValue In oValues
108                oItem = Me.Items.FindByText(sValue)
109                If oItem IsNot Nothing Then
110                    oItem.Selected = True
111                End If
112            Next
113        End Sub

114
115    End Class

116End Namespace

测试程序
在页面上放置 TBCheckBoxList 控件,我们只要使用 SelectedValueList 或 SelectedTextList 属性值,就可以轻易的取得或设定复选值。



 1   Protected Sub btnGetSelectedValueList_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnGetSelectedValueList.Click
 2        txtValue.Text = CheckBoxList1.SelectedValueList
 3    End Sub

 4
 5    Protected Sub btnSetSelectedValueList_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnSetSelectedValueList.Click
 6        CheckBoxList1.SelectedValueList = txtValue.Text
 7    End Sub

 8
 9
10    Protected Sub btnGetSelectedTextList_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnGetSelectedTextList.Click
11        txtValue.Text = CheckBoxList1.SelectedTextList
12    End Sub

13
14    Protected Sub btnSetSelectedTextList_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles btnSetSelectedTextList.Click
15        CheckBoxList1.SelectedTextList = txtValue.Text
16    End Sub

如果 TBCheckBoxList 的 SelectedValueList 及 SelectedTextList 属性需要系结字段时,只需直接设定即可。


posted on 2008-05-27 09:23  jeff377  阅读(1957)  评论(4编辑  收藏  举报