1

数時間試行した後、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()
4

2 に答える 2

2

代わりにCheckedItemsコレクションを使用するのはどうですか?

編集:

dim itemChecked as Object
For Each itemChecked In checkList_Facility.CheckedItems
   MsgBox(itemChecked.ToString())
Next
于 2013-07-09T20:16:28.073 に答える
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

おそらく互換性の問題が原因で、Microsoft はこのアプローチを使用することを望んでいないようです。これ.DataSourceは、他のメンバーが intellisense に隠されているためです。ただし、上記のような単純なセットアップでは機能しますが、これらのメンバーを入力する際に​​ IntelliSense に依存しないでください。

次に、次のコードを含むボタンがあるとします。

Dim v = CheckedListBox1.CheckedItems

この場合vは、基礎となるビジネス オブジェクトのコレクションであり、上記の場合は のコレクションになりますKeyValuePair(Of String, String)

あなたの場合、ビジネス オブジェクトは typeDataRecordInternalであるため、この型が返されることを期待し、コードで説明する必要があります。の動作が適切ToString()ではない可能性があるため、期待どおりに動作しないことに注意してください。

MsgBox(checkList_Facility.Items(i))

代わりに何らかの処理を行うことを検討していると思います。チェックされたすべてのアイテムについてユーザーにメッセージを送ることはあまり役に立ちません。代わりに、次のような別のコードが必要になる場合があります。

Dim record As DataRecordInternal = checkList_Facility.Items(i)
'do some processing on record variable
于 2013-07-09T20:24:00.563 に答える