[自定义服务器控件] 第三步:CheckBoxList。

前面发了文本框下拉列表框的,这回发一个CheckBoxList。不知道中文名字该叫什么。

CheckBoxList 最郁闷的地方就是:明明可以选择多个选项,但是 SelectedValue 只能得到第一个选项,其他被选中的还得另想办法。

不知道vs2005 有没有改进,至少 vs2003 是这样的。

Public Function GetSelectedValue() As String

        Dim item As ListItem

        Dim tmpStr As String = ""

        For Each item In Me.Items

            If item.Selected Then

                tmpStr &= item.Value & ","

            End If

        Next

        tmpStr = tmpStr.TrimEnd(",")

        Return tmpStr

    End Function

于是呢加了这个函数GetSelectedValue 来获取所有的选中的项的Value 值,用 “,”来分隔。

对应的还有

GetSelectedText       //获取 所有的选中的项的Text 值

SetSelectedByValue  //通过 Value 设置 选项

SetSelectedByText   //通过 Text  设置 选项

Public Sub SetSelectedByValue(ByVal listValues As String)



        Me.SelectedIndex = -

        If (listValues = "True") Then

            listValues = ""

        End If

        If (listValues = "False") Then

            listValues = ""

        End If

        Dim item As ListItem

        Dim i As Int32 = 

        Dim tmpStr() As String = listValues.Split(",")

        For Each item In Me.Items

            For i =  To tmpStr.Length - 

                If (item.Value.Equals(tmpStr(i))) Then

                    item.Selected = True

                End If

            Next

        Next

    End Sub

其他的地方就和 下拉列表框基本一致了,可以看看 第二步:下拉列表框

我就不重复写了,感兴趣的话看看下面的代码。

Imports System.ComponentModel

Imports System.Web.UI

Imports HBS

Imports System

Imports System.Web.UI.WebControls

Imports System.Data



<ToolboxData("<{0}:HBSCheckBoxList runat=server></{0}:HBSCheckBoxList>")> _

 Public Class HBSCheckBoxList

    Inherits System.Web.UI.WebControls.CheckBoxList

    Implements IGetControlValue



#Region "实现接口"

    <Bindable(True), Category("默认值"), DefaultValue(""), Description("获取控件类别")> _

    ReadOnly Property ControlKind() As String Implements IGetControlValue.ControlKind

        Get

            Return ""

        End Get

    End Property



    Public Function GetValue() As String Implements IGetControlValue.GetControlValue

        Return Me.GetSelectedValue



    End Function



    Public Function GetValue(ByVal kind As String) As String Implements IGetControlValue.GetControlValue

        Return ""



    End Function



    Public Sub SetValue(ByVal value As String) Implements IGetControlValue.SetControlValue

        Me.SetSelectedByValue(value)



    End Sub



    Public Sub SetValue(ByVal value As String, ByVal kind As String) Implements IGetControlValue.SetControlValue



    End Sub



#End Region





#Region "初始化 OnInit。设置CssClass、DataValueField、DataTextField、"

    Protected Overrides Sub OnInit(ByVal e As EventArgs)

        Me.CssClass = "chk"

        Me.DataValueField = "ID"

        Me.DataTextField = "txt"

        Me.Font.Size = FontUnit.Point()

    End Sub

#End Region



    '根据传入的ID设置下拉列表框的默认选项,如果没有找到,不选择,不抛出异常。

    '<param name="listValue">ID值,多个话用 | 分隔</param>

#Region "函数实现  setSelectedByValue"

    Public Sub SetSelectedByValue(ByVal listValues As String)



        Me.SelectedIndex = -

        If (listValues = "True") Then

            listValues = ""

        End If

        If (listValues = "False") Then

            listValues = ""

        End If

        Dim item As ListItem

        Dim i As Int32 = 

        Dim tmpStr() As String = listValues.Split(",")

        For Each item In Me.Items

            For i =  To tmpStr.Length - 

                If (item.Value.Equals(tmpStr(i))) Then

                    item.Selected = True

                End If

            Next

        Next

    End Sub

#End Region



    ' 根据传入的文本内容设置下拉列表框的默认选项,如果没有找到,选第一项,不抛出异常。

    ' <param name="listValue">文本内容</param>

#Region "函数实现  SetSelectedByText"

    Public Sub SetSelectedByText(ByVal listTexts As String)

        Me.SelectedIndex = -

        Dim item As ListItem

        Dim tmpStr() As String = listTexts.Split(",")

        Dim i As Int32 = 

        For Each item In Me.Items

            For i =  To tmpStr.Length - 

                If item.Text.Equals(tmpStr(i)) Then

                    item.Selected = True

                End If

            Next

        Next

    End Sub

#End Region





    '返回选择的ID值,用 , 分隔

#Region "函数实现  GetSelectedValue"

    Public Function GetSelectedValue() As String

        Dim item As ListItem

        Dim tmpStr As String = ""

        For Each item In Me.Items

            If item.Selected Then

                tmpStr &= item.Value & ","

            End If

        Next

        tmpStr = tmpStr.TrimEnd(",")

        Return tmpStr

    End Function

#End Region



    '返回选择的Text值,用 , 分隔

#Region "函数实现  GetSelectedText"

    Public Function GetSelectedText() As String

        Dim item As ListItem

        Dim tmpStr As String = ""

        For Each item In Me.Items

            If item.Selected Then

                tmpStr &= item.Text & ","

            End If

        Next

        tmpStr = tmpStr.TrimEnd(",")

        Return tmpStr

    End Function

#End Region





    ' 传入查询语句,绑定下拉列表框。正确执行返回空字符串,不正确返回错误信息

    ' <param name="sqlString">查询语句</param>

    ' <returns>正确执行返回空字符串,不正确返回错误信息</returns>

#Region "函数实现  bindList"

    Public Function BindListBySQL(ByVal sqlString As String)

        Dim dal = New DataAccessLayer

        Me.DataSource = dal.RunSqlDataTable(sqlString)

        Me.DataBind()

        dal.Dispose()

    End Function

#End Region



#Region "函数实现  bindList"

    Public Function BindListBySQL(ByVal sqlString As String, ByVal isAddItem As Boolean)

        Dim dal = New DataAccessLayer

        Me.DataSource = dal.RunSqlDataTable(sqlString)

        Me.DataBind()

        dal.Dispose()

    End Function

#End Region





    ' 传入查询语句,绑定下拉列表框。正确执行返回空字符串,不正确返回错误信息

    ' <param name="sqlString">查询语句</param>

    ' <returns>正确执行返回空字符串,不正确返回错误信息</returns>

#Region "函数实现  bindList"

    Public Function BindListByStore(ByVal store As String) As String

        Dim dal As New DataAccessLayer

        Me.DataSource = dal.RunStoreDataTable(store)

        Me.DataBind()

        dal.Dispose()

    End Function

#End Region





    ' 添加日期。给下拉列表框填充从 1 到 lastDay 的数据。value 和 text 值一致。

    ' <param name="lastDay">最后一天</param>

    ' <param name="isAddDefaultItem">是否添加 “请选择”</param>

#Region "函数实现  ItemAddDate"

    Public Sub ItemAddDate(ByVal lastDay As Int32)

        Dim i As Int32

        For i =  To lastDay

            Me.Items.Add(New ListItem(i.ToString(), i.ToString()))

        Next

    End Sub

#End Region



    ' 添加月份。给下拉列表框填充从 1 到 12 的数据。value 和 text 值一致。

    ' <returns></returns>

#Region "函数实现  ItemAddMonth"

    Public Sub ItemAddMonth()

        Dim i As Int32

        For i =  To 

            Me.Items.Add(New ListItem(i.ToString(), i.ToString()))

        Next

    End Sub



#End Region



    ' 用两个字符串来添加选项。

    ' <param name="texts">显示的内容,用的字符串,用“~”分开。</param>

    ' <param name="values">value值,用的字符串,用“~”分开。</param>

#Region "函数实现  AddItemByString"

    Public Sub AddItemByString(ByVal values As String, ByVal texts As String)

        Dim strText As String() = texts.Split("~")

        Dim strValue As String() = values.Split("~")

        Dim i As Int32

        For i =  To strText.Length

            Me.Items.Add(New ListItem(strText(i), strValue(i)))

        Next

    End Sub



#End Region



    ' 用一个字符串来添加选项。value在前,Text在后

    ' <param name="texts">显示的内容,用的字符串,用“~”分开。</param>

#Region "函数实现  AddItemByString"

    Public Sub AddItemByString(ByVal TextsAndValues As String)



        Dim str As String() = TextsAndValues.Split("~")

        Dim Len As Int32 = str.Length \ 

        Dim i As Int32

        For i =  To Len - 

            Me.Items.Add(New ListItem(str(Len + i), str(i)))

        Next

    End Sub



#End Region



    ' 用两个数组来添加选项。

    ' <param name="texts">显示的内容。</param>

    ' <param name="values">value值。</param>

#Region "函数实现  AddItemByArray"

    Public Sub AddItemByArray(ByVal values As String(), ByVal texts As String())

        Dim i As Int32



        For i =  To texts.Length

            Me.Items.Add(New ListItem(texts(i), values(i)))

        Next

    End Sub



#End Region



    ' 用一个数组来添加选项。values在前,Text在后

    ' <param name="texts">显示的内容,用的字符串,用“~”分开。</param>

    ' <returns></returns>

#Region "函数实现  AddItemByArray"

    Public Sub AddItemByArray(ByVal ValuesAndTexts As String())



        Dim len As Int32 = ValuesAndTexts.Length / 

        Dim i As Int32

        For i =  To len

            Me.Items.Add(New ListItem(ValuesAndTexts(len + i), ValuesAndTexts(i)))

        Next

    End Sub



#End Region



#Region "函数实现  AddItemByArrayTwo"

    Public Sub AddItemByArrayTwo(ByVal ValuesAndTexts As String(,))



        Dim len As Int32 = ValuesAndTexts.Length /  - 

        Dim i As Int32

        For i =  To len

            Me.Items.Add(New ListItem(ValuesAndTexts(i, ), ValuesAndTexts(i, )))

        Next

    End Sub



#End Region

End Class

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

加点的心得

加点的一般方法:    Catalog _catalog=MapInfo.Engine.Session.Current.Catalog;    MapInf...

197100
来自专栏GIS讲堂

js实现城市首字母导航

12010
来自专栏葡萄城控件技术团队

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类、类成员函数、类成员变量进行访问控制。同时,访问控制符也是语法保留关键字,用于封装组件。 Pub...

33690
来自专栏java系列博客

HibernateCallback 的用法

11920
来自专栏Jerry的SAP技术分享

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。

17540
来自专栏算法修养

CodeForces 156B Suspects(枚举)

B. Suspects time limit per test 2 seconds memory limit per test 256 megaby...

34050
来自专栏码匠的流水账

springboot2自定义statsd指标前缀

springboot2引入了micrometer,1.x版本的spring.metrics.export.statsd.prefix在2版本中已经被标记为废弃,...

15220
来自专栏Golang语言社区

提高 golang 的反射性能

golang 的反射很慢。这个和它的 api 设计有关。在 java 里面,我们一般使用反射都是这样来弄的。 ---- Field field = clazz....

54050
来自专栏五分钟学算法

LeeCode题目图解

There is an English version of README here. just click it!

17220
来自专栏草根专栏

用C# (.NET Core) 实现迭代器设计模式

本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: ? 菜单项Men...

36250

扫码关注云+社区

领取腾讯云代金券