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

简介: 前面发了文本框和下拉列表框的,这回发一个CheckBoxList。不知道中文名字该叫什么。CheckBoxList 最郁闷的地方就是:明明可以选择多个选项,但是 SelectedValue 只能得到第一个选项,其他被选中的还得另想办法。
前面发了 文本框下拉列表框的,这回发一个 CheckBoxList。不知道中文名字该叫什么。

CheckBoxList 最郁闷的地方就是:明明可以选择多个选项,但是 SelectedValue 只能得到第一个选项,其他被选中的还得另想办法。
不知道vs2005 有没有改进,至少 vs2003 是这样的。

  Public   Function GetSelectedValue() 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() Sub SetSelectedByValue(ByVal listValues As String)

        
Me.SelectedIndex = -1
        
If (listValues = "True"Then
            listValues 
= "1"
        
End If
        
If (listValues = "False"Then
            listValues 
= "0"
        
End If
        
Dim item As ListItem
        
Dim i As Int32 = 0
        
Dim tmpStr() As String = listValues.Split(",")
        
For Each item In Me.Items
            
For i = 0 To tmpStr.Length - 1
                
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 Class HBSCheckBoxList
    
Inherits System.Web.UI.WebControls.CheckBoxList
    
Implements IGetControlValue

实现接口#Region "实现接口"
    
<Bindable(True), Category("默认值"), DefaultValue("210"), Description("获取控件类别")> _
    
ReadOnly Property ControlKind()Property ControlKind() As String Implements IGetControlValue.ControlKind
        
Get
            
Return "210"
        
End Get
    
End Property


    
Public Function GetValue()Function GetValue() As String Implements IGetControlValue.GetControlValue
        
Return Me.GetSelectedValue

    
End Function


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

    
End Function


    
Public Sub SetValue()Sub SetValue(ByVal value As StringImplements IGetControlValue.SetControlValue
        
Me.SetSelectedByValue(value)

    
End Sub


    
Public Sub SetValue()Sub SetValue(ByVal value As StringByVal kind As StringImplements IGetControlValue.SetControlValue

    
End Sub


#End Region



初始化 OnInit。设置CssClass、DataValueField、DataTextField、#Region "初始化 OnInit。设置CssClass、DataValueField、DataTextField、"
    
Protected Overrides Sub OnInit()Sub OnInit(ByVal e As EventArgs)
        
Me.CssClass = "chk"
        
Me.DataValueField = "ID"
        
Me.DataTextField = "txt"
        
Me.Font.Size = FontUnit.Point(9)
    
End Sub

#End Region


    
'根据传入的ID设置下拉列表框的默认选项,如果没有找到,不选择,不抛出异常。
    '<param name="listValue">ID值,多个话用 | 分隔</param>
函数实现  setSelectedByValue#Region "函数实现  setSelectedByValue"
    
Public Sub SetSelectedByValue()Sub SetSelectedByValue(ByVal listValues As String)

        
Me.SelectedIndex = -1
        
If (listValues = "True"Then
            listValues 
= "1"
        
End If
        
If (listValues = "False"Then
            listValues 
= "0"
        
End If
        
Dim item As ListItem
        
Dim i As Int32 = 0
        
Dim tmpStr() As String = listValues.Split(",")
        
For Each item In Me.Items
            
For i = 0 To tmpStr.Length - 1
                
If (item.Value.Equals(tmpStr(i))) Then
                    item.Selected 
= True
                
End If
            
Next
        
Next
    
End Sub

#End Region


    
' 根据传入的文本内容设置下拉列表框的默认选项,如果没有找到,选第一项,不抛出异常。
    ' <param name="listValue">文本内容</param>
函数实现  SetSelectedByText#Region "函数实现  SetSelectedByText"
    
Public Sub SetSelectedByText()Sub SetSelectedByText(ByVal listTexts As String)
        
Me.SelectedIndex = -1
        
Dim item As ListItem
        
Dim tmpStr() As String = listTexts.Split(",")
        
Dim i As Int32 = 0
        
For Each item In Me.Items
            
For i = 0 To tmpStr.Length - 1
                
If item.Text.Equals(tmpStr(i)) Then
                    item.Selected 
= True
                
End If
            
Next
        
Next
    
End Sub

#End Region



    
'返回选择的ID值,用 , 分隔
函数实现  GetSelectedValue#Region "函数实现  GetSelectedValue"
    
Public Function GetSelectedValue()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值,用 , 分隔
函数实现  GetSelectedText#Region "函数实现  GetSelectedText"
    
Public Function GetSelectedText()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>
函数实现  bindList#Region "函数实现  bindList"
    
Public Function BindListBySQL()Function BindListBySQL(ByVal sqlString As String)
        
Dim dal = New DataAccessLayer
        
Me.DataSource = dal.RunSqlDataTable(sqlString)
        
Me.DataBind()
        dal.Dispose()
    
End Function

#End Region


函数实现  bindList#Region "函数实现  bindList"
    
Public Function BindListBySQL()Function BindListBySQL(ByVal sqlString As StringByVal 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>
函数实现  bindList#Region "函数实现  bindList"
    
Public Function BindListByStore()Function BindListByStore(ByVal store As StringAs 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>
函数实现  ItemAddDate#Region "函数实现  ItemAddDate"
    
Public Sub ItemAddDate()Sub ItemAddDate(ByVal lastDay As Int32)
        
Dim i As Int32
        
For i = 1 To lastDay
            
Me.Items.Add(New ListItem(i.ToString(), i.ToString()))
        
Next
    
End Sub

#End Region


    
' 添加月份。给下拉列表框填充从 1 到 12 的数据。value 和 text 值一致。
    ' <returns></returns>
函数实现  ItemAddMonth#Region "函数实现  ItemAddMonth"
    
Public Sub ItemAddMonth()Sub ItemAddMonth()
        
Dim i As Int32
        
For i = 1 To 12
            
Me.Items.Add(New ListItem(i.ToString(), i.ToString()))
        
Next
    
End Sub


#End Region


    
' 用两个字符串来添加选项。
    ' <param name="texts">显示的内容,用的字符串,用“~”分开。</param>
    ' <param name="values">value值,用的字符串,用“~”分开。</param>
函数实现  AddItemByString#Region "函数实现  AddItemByString"
    
Public Sub AddItemByString()Sub AddItemByString(ByVal values As StringByVal texts As String)
        
Dim strText As String() = texts.Split("~")
        
Dim strValue As String() = values.Split("~")
        
Dim i As Int32
        
For i = 1 To strText.Length
            
Me.Items.Add(New ListItem(strText(i), strValue(i)))
        
Next
    
End Sub


#End Region


    
' 用一个字符串来添加选项。value在前,Text在后
    ' <param name="texts">显示的内容,用的字符串,用“~”分开。</param>
函数实现  AddItemByString#Region "函数实现  AddItemByString"
    
Public Sub AddItemByString()Sub AddItemByString(ByVal TextsAndValues As String)

        
Dim str As String() = TextsAndValues.Split("~")
        
Dim Len As Int32 = str.Length \ 2
        
Dim i As Int32
        
For i = 0 To Len - 1
            
Me.Items.Add(New ListItem(str(Len + i), str(i)))
        
Next
    
End Sub


#End Region


    
' 用两个数组来添加选项。
    ' <param name="texts">显示的内容。</param>
    ' <param name="values">value值。</param>
函数实现  AddItemByArray#Region "函数实现  AddItemByArray"
    
Public Sub AddItemByArray()Sub AddItemByArray(ByVal values As String(), ByVal texts As String())
        
Dim i As Int32

        
For i = 0 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>
函数实现  AddItemByArray#Region "函数实现  AddItemByArray"
    
Public Sub AddItemByArray()Sub AddItemByArray(ByVal ValuesAndTexts As String())

        
Dim len As Int32 = ValuesAndTexts.Length / 2
        
Dim i As Int32
        
For i = 0 To len
            
Me.Items.Add(New ListItem(ValuesAndTexts(len + i), ValuesAndTexts(i)))
        
Next
    
End Sub


#End Region


函数实现  AddItemByArrayTwo#Region "函数实现  AddItemByArrayTwo"
    
Public Sub AddItemByArrayTwo()Sub AddItemByArrayTwo(ByVal ValuesAndTexts As String(,))

        
Dim len As Int32 = ValuesAndTexts.Length / 2 - 1
        
Dim i As Int32
        
For i = 0 To len
            
Me.Items.Add(New ListItem(ValuesAndTexts(i, 1), ValuesAndTexts(i, 0)))
        
Next
    
End Sub


#End Region

End Class

相关文章
|
6月前
|
弹性计算 监控 数据可视化
ecs自定义监控
ecs自定义监控
65 1
|
开发框架 前端开发 .NET
Ajax之三 Ajax服务器端控件(下)
Ajax之三 Ajax服务器端控件(下)
61 0
|
开发框架 前端开发 JavaScript
Ajax之三 Ajax服务器端控件(上)
Ajax之三 Ajax服务器端控件
64 0
|
3月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
44 8
|
2月前
|
开发框架 JavaScript 前端开发
|
4月前
|
弹性计算 资源调度 API
云服务器 ECS产品使用问题之如何实现自定义页面适配移动端
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
云服务器 ECS产品使用问题之如何实现自定义页面适配移动端
|
5月前
|
弹性计算 网络协议 安全
阿里云服务器ECS自定义购买方式各选项参数选择与注意事项参考
在我们通过自定义购买的方式购买阿里云服务器器ECS时,会有多个选项,有的新手用户可能并不是很清楚这些选项是什么,选择或设置时需要注意什么,本文将从付费类型、地域与可用区、网络及实例、镜像、存储、带宽和安全组、管理设置以及高级选项等多个方面,为您详细介绍如何选择与配置阿里云ECS实例,以供参考。
阿里云服务器ECS自定义购买方式各选项参数选择与注意事项参考
|
3月前
|
网络协议 Ubuntu Linux
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
如何在 DigitalOcean 云服务器上创建自定义品牌名称服务器
51 0
|
6月前
|
资源调度
在 Next.js 中使用自定义服务器框架进行服务器端渲染
在 Next.js 中使用自定义服务器框架进行服务器端渲染
在自定义服务器框架中处理 GET 请求
在自定义服务器框架中处理 GET 请求