如何从Check List VB获取已检查项目的列表。净Winform

时间:2013-07-09 20:06:16

标签: vb.net

经过几个小时的尝试,我能够获得一个绑定到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()

2 个答案:

答案 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