如何从 vb.net 中的列值填充的组合框中删除重复项?

How to remove duplicates from combobox populated from column values in vb.net?

到目前为止,我已经设法检索列值并使用以下代码将它们填充到组合框中:

ComboBox1.DataSource = DbdocsDataSet.dbdocs

ComboBox1.DisplayMember = "serie" '(serie是我的table中的一个专栏)

table 装满了可以属于同一系列的书。所以我用上面的代码得到的是一个充满不同乘法值的组合框。

有没有办法删除它们?

请看一下

   Public Sub test()

      Dim dt As New DataTable

      dt.Columns.Add("serie")
      dt.Columns.Add("title")

      dt.Rows.Add("1", "2")
      dt.Rows.Add("1", "3")
      dt.Rows.Add("1", "2")

      'ComboBox
      cboTest.DataSource = dt.DefaultView.ToTable(True, "serie")
      cboTest.DisplayMember = "serie"

   End Sub

^^

如果您可以从您的数据集中检索 DataTable 或使用 Tables(0),那么这应该可以满足您的要求。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt As New DataTable
    Dim lst = (From row In dt.AsEnumerable
               Select row.Field(Of String)(0)).Distinct.ToList
    ComboBox1.DataSource = lst
End Sub

看起来您正在使用强类型数据表。请改用以下代码:

ComboBox1.Items.AddRange(DbdocsDataSet.dbdocs.Select(Function(r) r.serie).Distinct().ToArray())

您不需要显示成员,因为此解决方案不使用绑定。如果您需要继续使用绑定,可能是因为您在某处使用了 ValueMember,请考虑:

ComboBox1.DataSource = DbdocsDataSet.dbdocs_
 .GroupBy(Function (r) r.serie) _
 .Select(Function (g) g.First()) _
 .ToList()

ComboBox1.DisplayMember = "serie" '(serie is a column in my table)

ComboBox1.ValueMember = "..."

将控件添加到表单后,请将它们重命名为更好的名称

请注意,如果 valuemember 是 serie 组中的特定项目,您需要添加代码以确保您想要的值排在第一位(在 First() 之前添加一个 orderby)


我也赞同一开始就没有重复的感觉。向数据集的表适配器添加另一个查询,例如:

SELECT DISTINCT serie FROM whateveryourtablenameis

并将其用作您的数据源