2017-02-17 86 views
0
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中选择的同一个Student ID的行,问题是它只检查DataGridView的第一行。如果有学生ID匹配,我怎样才能让它检查所有的行?DataGridView检查所有行vb.net

+0

您能否提供更多信息?代码看起来很好。 –

+0

@ProGrammer当我从comboBoxStudentID中选择学生ID 1时,datagridview将显示包含学生ID 1的行。但是,当我选择其他学生ID时,它不起作用,我不知道为什么。 – user3219333

+0

您是否检查过文字限制为ID“”2“”而不是“”2“或类似的东西? –

回答

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 
相关问题