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匹配,如何检查所有行?
答案 0 :(得分:0)
在不知道数据的组织方式的情况下,您可以通过将DataGridView
和ComboBox
绑定到同一数据源来实现此目的。由于未指定此内容并查看代码片段(似乎有效),因此它似乎循环遍历行,如果当前选定的组合框文本包含在第一个列单元格中,则使该行可见。否则使行不可见。
发布的代码似乎有效,但您可能需要考虑一种情况。如果组合框包含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