将数据发送到checkedlistbox

时间:2012-09-27 10:39:55

标签: vb.net linq-to-sql

我有一个查询,其中包含我放入checkedlistbox的名称列表。 但我也想用它发送我的表密钥。但与此同时,我不想表现出来。

当前代码:

        Dim Querynames = (From rec In db.table
                         Select rec.tableKey, rec.Names).ToList

        For Each item In Querynames 
          'Need to send my table key with each name
            CheckedListBox1.Items.Add(item.Names)
        Next

我将使用此表键来查询搜索。我想阻止的是制作第二个Linq。

如何使用checkedlistbox发送“隐藏”数据(这将是表格密钥),以便我可以从代码中获取密钥?

1 个答案:

答案 0 :(得分:1)

您应该将整个对象添加到CheckedListBox,而不仅仅是Names

For Each item In Querynames 
    CheckedListBox1.Items.Add(item)
Next

然后你应该设置DisplayMember属性。

CheckedListBox1.DisplayMember = "Names"

所以CheckedListBox只显示Names属性。

您可能希望使用常规类而不是匿名类,因此您可以将项目强制转换为访问tableKey属性。


考虑以下示例:

Sub Main
    Dim clb = new System.Windows.Forms.CheckedListBox()

    Dim f = new System.Windows.Forms.Form()
    f.Controls.Add(clb)

    Dim items = new Item() { new Item() with {.TableKey = "Foo", .Names = "Foobar"},
                             new Item() with {.TableKey = "ABC", .Names = "ABCDEFG"}}

    For Each item in items
        clb.Items.Add(item)
    next

    clb.DisplayMember = "Names"

    f.ShowDialog()

    Dim message = String.Join(" and ", clb.CheckedItems.Cast(Of Item).Select(Function(i) i.TableKey))
    System.Windows.Forms.MessageBox.Show(message)
End Sub

Class Item
    Public Property TableKey As String 
    Public Property Names As String 
End Class

另一种方法是将查询结果存储在Dictionary中,稍后只需查找Names< - > tableKey对。