关于ListBox和DataTable的一点儿心得
2005-06-02 11:59 胖子 阅读(2659) 评论(1) 编辑 收藏 举报ListBox的多选
这个比较简单,通过循环就可以搞定。
首先设置ListBox的选择模式为多行:
Me.ListBox1.SelectionMode = ListSelectionMode.Multiple
然后是处理选择:
If Me.ListBox1.SelectedIndex > -1 Then
Dim sValue As String
Dim sText As String
For i As Integer = 0 To Me.ListBox1.Items.Count() - 1
If Me.ListBox1.Items(i).Selected Then
sValue &= Me.ListBox1.Items(i).Value & ","
sText &= Me.ListBox1.Items(i).Text & ","
End If
Next
Me.Label1.Text = "You choose: " & Left(sValue, sValue.Length - 1)
Me.Label2.Text = "You choose: " & Left(sText, sText.Length - 1)
Else
Me.Label1.Text = "You have no choose!"
Me.Label2.Text = ""
End If
Dim sValue As String
Dim sText As String
For i As Integer = 0 To Me.ListBox1.Items.Count() - 1
If Me.ListBox1.Items(i).Selected Then
sValue &= Me.ListBox1.Items(i).Value & ","
sText &= Me.ListBox1.Items(i).Text & ","
End If
Next
Me.Label1.Text = "You choose: " & Left(sValue, sValue.Length - 1)
Me.Label2.Text = "You choose: " & Left(sText, sText.Length - 1)
Else
Me.Label1.Text = "You have no choose!"
Me.Label2.Text = ""
End If
这样就可以将ListBox里的选择内容变成以 "," 隔开的字符串。
ListBox 的删除
ListBox提供了两种删除Item的方法,Remove 和 RemoveAtt(Clear方法是移除了所有的对象,不能算是删除具体的Item)
删除单个的选择比较容易,下面介绍一个删除多个选择的方法,当然也能删除单个了
Do Until Me.ListBox1.SelectedIndex < 0
Me.ListBox1.Items.RemoveAt(Me.ListBox1.SelectedIndex)
Loop
Me.ListBox1.Items.RemoveAt(Me.ListBox1.SelectedIndex)
Loop
DataTable
和上面的ListBox有点儿关系,在工作中遇到的情况。
要求选择不同的人员到不同的ListBox中,每个ListBox代表一种角色。
所添加的人不能同时出现在两个及其以上的ListBox中,也就是说每个人只能是一种角色。看下面的代码:
Private Sub Check()
Dim strMsg As String = ""
Dim dt As New DataTable
Dim colID As DataColumn
'动态生成Column
'
'也可以下面的语句
'Dim colID As DataColumn = New DataColumn("id", GetType(String))
'
colID = New DataColumn("id")
colID.DataType = GetType(String)
'这句话是关键,设置该列为unique约束,不能插入重复的值
colID.Unique = True
dt.Columns.Add(colID)
If LstInsert(Me.ListBox1, dt) Then
Me.Label3.Text = ""
End If
dt.Clear()
dt.Dispose()
End Sub
Private Function LstInsert(ByVal lst As UI.WebControls.ListBox, ByRef dt As DataTable) As Boolean
'生成DataRow
Dim myNewRow As DataRow
Dim flag As Boolean = True
For i As Integer = 0 To Me.ListBox1.Items.Count - 1
myNewRow = dt.NewRow()
myNewRow("id") = Me.ListBox1.Items(i).Value
Try
dt.Rows.Add(myNewRow)
Catch ex As Exception
flag = False
'Me.ListBox1.ClearSelection()
Me.ListBox1.Items(i).Selected = True
Me.Label3.Text &= Me.ListBox1.Items(i).Text & " 重复!不能一人身兼多职! "
'Exit For
End Try
Next
Return flag
End Function
Dim strMsg As String = ""
Dim dt As New DataTable
Dim colID As DataColumn
'动态生成Column
'
'也可以下面的语句
'Dim colID As DataColumn = New DataColumn("id", GetType(String))
'
colID = New DataColumn("id")
colID.DataType = GetType(String)
'这句话是关键,设置该列为unique约束,不能插入重复的值
colID.Unique = True
dt.Columns.Add(colID)
If LstInsert(Me.ListBox1, dt) Then
Me.Label3.Text = ""
End If
dt.Clear()
dt.Dispose()
End Sub
Private Function LstInsert(ByVal lst As UI.WebControls.ListBox, ByRef dt As DataTable) As Boolean
'生成DataRow
Dim myNewRow As DataRow
Dim flag As Boolean = True
For i As Integer = 0 To Me.ListBox1.Items.Count - 1
myNewRow = dt.NewRow()
myNewRow("id") = Me.ListBox1.Items(i).Value
Try
dt.Rows.Add(myNewRow)
Catch ex As Exception
flag = False
'Me.ListBox1.ClearSelection()
Me.ListBox1.Items(i).Selected = True
Me.Label3.Text &= Me.ListBox1.Items(i).Text & " 重复!不能一人身兼多职! "
'Exit For
End Try
Next
Return flag
End Function
动态生成Unique列的方法适合于一次性插入不同数据的执行前检验。
以上代码为测试使用,只是实现了功能要求,具体要用的话还要再酌情处理一下。