从以前的控件制作项目

时间:2017-09-12 20:21:29

标签: vb.net datagridview combobox

我们说我的表单上有两个DataGridViews。 DGV中的列都是不同的。但是,两个网格的第一列称为" ProductID"。 " ProductID"列被格式化为组合框。对于第一个网格,我将默认组合框选项为数字1-10。如何将第二个DGV组合框设置为仅具有已在第一个DGV中选择的选项?

因此,如果我填写第一个DGV的两行,并且第一个ProductID是' 1'第二行是' 5',' ProductID'的唯一选项。在第二个DataGridView上将是' 1'和' 5'。非常感谢,我希望我提供了充足的信息。

1 个答案:

答案 0 :(得分:0)

这应该有效

Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
    Dim vals = DataGridView1.
        Rows.OfType(Of DataGridViewRow).
        Where(Function(r) r.Cells(0).Value IsNot Nothing).
        Select(Function(r) r.Cells(0).Value).
        Distinct()
    Me.Column2.Items.Clear()
    For Each v In vals
        Me.Column2.Items.Add(v.ToString())
    Next
End Sub

在linq:

  • 获取行。必须使用OfType进行转换才能获得IEnumerable
  • 仅按值
  • 过滤行
  • 选择值(字符串)
  • 选择一个不同的子集,当两次选择7时,不要有两个7

然后

  • 清除所有现有项目
  • 添加项目

image:

DataGridView1是第一列中每个组合框中具有10个ID的那个。这由代码中的索引引用为r.Cells(0)

中的索引0

Column1是上述列的名称

Column2是第二个DataGridView中要过滤项目的列的名称

如果您在dgv 2中选择了一个值,然后在dgv1中取消选择它,则会出现异常。由你来处理。