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

Я создал этот метод, чтобы проверить и отобразить строку, содержащую тот же Student ID, как выбранные из comboBoxStudentID проблемы проверяет только первую строку DataGridView. Как я могу заставить его проверять все строки, если есть совпадение с идентификатором студента?проверки DataGridView все Ряды vb.net

+0

Можете ли вы предоставить дополнительную информацию? Код выглядит отлично, как это. –

+0

@ProGrammer, когда я выбираю идентификатор студента 1 из comboBoxStudentID, datagridview отображает строку, контактирующую с идентификатором студента 1. Но когда я выбираю другой идентификатор студента, он не работает, и я не знаю почему. – user3219333

+0

Вы проверили, что текст ограничен идентификатором '' 2 "', а не '' 2 "' или что-то подобное? –

ответ

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 
Смежные вопросы