1

我有一个查询,其中包含我放入选中列表框中的名称列表。但我也想用它发送我的桌子钥匙。但同时我不想表现出来。

当前代码:

        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。

如何使用我的选中列表框发送“隐藏”数据(这将是表键),以便我可以从代码中获取键?

4

1 回答 1

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

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

于 2012-09-27T11:23:32.193 回答