经过几个小时的尝试,我能够获得一个绑定到SQL源的检查列表。但是,现在我想检查检查列表中检查的所有项目。我尝试了上面的代码,但它不起作用
For i As Integer = 0 To checkList_Facility.Items.Count - 1
If (checkList_Facility.GetItemChecked(i)) = True Then
MsgBox(checkList_Facility.Items(i))
End If
Next
绑定代码:
Dim queryString As String = "SELECT Facility FROM Database.dbo.Facility"
Dim connection As New SqlConnection(connectionString)
Dim command As New SqlCommand(queryString, connection)
connection.Open()
Dim dataReader As SqlDataReader = command.ExecuteReader()
Dim var As New DataTable
Dim source As New BindingSource
source.DataSource = dataReader
CheckList_Facility.DataSource = source
CheckList_Facility.ValueMember = "Facility"
connection.Close()
答案 0 :(得分:2)
如何使用CheckedItems
collection呢?
编辑:
dim itemChecked as Object
For Each itemChecked In checkList_Facility.CheckedItems
MsgBox(itemChecked.ToString())
Next
答案 1 :(得分:1)
CheckedItems似乎是个不错的选择。下面是它的工作原理。为简单起见,假设您的基础业务对象(DataSource)是Dictionary(Of String, String)
:
Dim dict As New Dictionary(Of String, String)
With dict
.Add("1", "One")
.Add("2", "Two")
.Add("3", "Three")
End With
你有以下约束力:
With CheckedListBox1
.DataSource = dict.ToList
.ValueMember = "Key"
.DisplayMember = "Value"
End With
似乎微软不希望我们使用这种方法,可能是由于兼容性问题。你知道这是因为.DataSource
和其他成员隐藏在intellisense中。但是,对于如上所述的简单设置,它可以工作,只是不要依赖intellisense来输入这些成员。
现在假设您有一个按钮,其中包含以下代码:
Dim v = CheckedListBox1.CheckedItems
在这种情况下,v
是基础业务对象的集合,对于上述情况,它将是KeyValuePair(Of String, String)
的集合。
在您的情况下,您的业务对象的类型为DataRecordInternal
,因此您必须返回此类型并在代码中对其进行说明。请注意,它可能没有ToString()
的良好行为,因此这不会像您期望的那样工作:
MsgBox(checkList_Facility.Items(i))
我相信您正在寻求进行一些处理,向用户发送关于每个已检查项目的消息并不是非常有用。因此,您可能希望使用不同的代码,例如:
Dim record As DataRecordInternal = checkList_Facility.Items(i)
'do some processing on record variable