如何从 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
并将其用作您的数据源
到目前为止,我已经设法检索列值并使用以下代码将它们填充到组合框中:
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
并将其用作您的数据源