2017-02-17 84 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