2017-02-17 1 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と同じStudent IDを含む行を表示しました。問題はDataGridViewの最初の行のみをチェックすることです。学生IDが一致すれば、すべての行をチェックするにはどうしたらいいですか?DataGridViewすべての行を確認します。

+0

詳細情報を提供できますか?コードはどのように見えますか? –

+0

@ProGrammer私がcomboBoxStudentIDからStudent ID 1を選択すると、datagridviewは学生ID 1を含む行を表示します。しかし、私が他のStudent IDを選択すると、それはうまくいかず、理由がわかりません。 – user3219333

+0

あなたは、テキストがID「2」で、「2」などではないことを確認しましたか? –

答えて

0

データがどのように構成されているかわからない場合は、DataGridViewComboBoxを同じデータソースにバインドすることでこれを行うことができます。これは指定されておらず、コードのスニペット(動作しているように見える)を見ると、行をループするように見え、現在選択されているコンボボックスのテキストが最初の列セルに含まれている場合は、それ以外の場合は行を非表示にします。

投稿されたコードは動作するようですが、考慮したいシナリオが1つあります。コンボボックスにDataGridView、THENの列1にある値が含まれている場合、ユーザーがコンボボックスで値を選択すると、DataGridViewには現在のコンボボックスの選択と一致する値のみが表示されます。これはあなたがやろうとしているようです。

問題は、どのようにすべての行を再表示しているかです。

コンボボックスの選択がある値に変更されると、ユーザーは選択を削除できますが、別のイベントを処理しない限り、すべての行は表示されません。また、この戦略はあまり直感的ではありません。 1つの可能な解決策(下記)は、コンボボックスアイテムの上部に「リセット」の一番上のアイテムを追加するだけです。ユーザーが「リセット」を選択すると、すべての行が表示されます。お役に立てれば。

これを繰り返すには、これを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 
関連する問題