DataGridView检查所有Rows vb.net

时间:2017-02-17 11:35:54

标签: vb.net datagridview

Private Sub comboBoxStudentID_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comboBoxStudentID.SelectedIndexChanged
    For Each dr As DataGridViewRow In Me.dataGridViewStudent.Rows

        If dr.Cells(0).Value.ToString.Contains(comboBoxStudentID.Text) Then dr.Visible = True Else dr.Visible = False


    Next
End Sub

我创建了这个方法来检查并显示一个包含与从comboBoxStudentID中选择的学生ID相同的学生ID的行,问题是它只检查DataGridView的第一行。如果学生ID匹配,如何检查所有行?

1 个答案:

答案 0 :(得分:0)

在不知道数据的组织方式的情况下,您可以通过将DataGridViewComboBox绑定到同一数据源来实现此目的。由于未指定此内容并查看代码片段(似乎有效),因此它似乎循环遍历行,如果当前选定的组合框文本包含在第一个列单元格中,则使该行可见。否则使行不可见。

发布的代码似乎有效,但您可能需要考虑一种情况。如果组合框包含DataGridView的第一列中的值,那么,当用户在组合框中选择一个值时,DataGridView将仅显示与当前组合框匹配的值选择。这似乎是你想要做的。

问题是如何重新显示所有行?

组合框选择更改为某个值后,用户可以删除选择,但除非您处理其他事件,否则不会显示所有行。此策略也不是非常直观的用户。一种可能的解决方案(下面)只是将“重置”的顶部项添加到组合框项的顶部。然后,当用户选择“重置”时,所有行都将变为可见。希望这会有所帮助。

重申:您应该考虑使用DataSource和可能BindingSource进行设置,以便自动为您完成此操作。只是一个想法。

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
  If ComboBox1.SelectedIndex > 0 Then
    For Each dr As DataGridViewRow In DataGridView1.Rows
      If (Not dr.IsNewRow) Then
        If dr.Cells(0).Value.ToString.Contains(ComboBox1.Text) Then
          dr.Visible = True
        Else
          dr.Visible = False
        End If
      End If
    Next
  Else
    For Each row As DataGridViewRow In DataGridView1.Rows
      row.Visible = True
    Next
  End If
End Sub