Изменение состояний флажков DGV в соответствии с DataTable - PullRequest
0 голосов
/ 29 июня 2018

У меня есть DataGridView с двумя столбцами (один из них типа CheckBox) и DataSet с DataTable, построенным с результатом запроса (только с одним столбцом). Однако я хочу отметить все флажки, имя которых указано на DataTable:

name_col
--------
  A001
  A002
  A003

Мой последний желаемый статус флажков в DataGridView в соответствии с DataTable content:

checkbox_col | name_col
-----------------------
    X        |  A001   
    X        |  A002
    X        |  A003
             |  A004
             |  A005

Тем не менее, я получаю MissingMemberException при сравнении dgv.DataSource значений элемента и DataTable значений. У меня есть этот код, чтобы установить флажки в соответствии с содержанием DataTable. Я хочу знать, в чем заключается моя ошибка и как ее исправить. Заранее спасибо (PD: ds - это DataSet, содержащий DataTable):

    If ds.Tables(0).Rows.Count() > 0 Then
        For Each fon As DataRow In ds.Tables(0).Rows
            For Each i As DataGridViewRow In Dgv.Rows
                If fon.Item(0) = Dgv.DataSource.Columns(0).Items.ToString() Then
                    i.Cells("col_check").Value = True
                End If
            Next
        Next
    End If

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Что ж, мне пришлось внести изменения, предложенные @Mary, и немного откорректировать используемые столбцы:

                If fon(0).ToString = i.Cells(2).Value.ToString Then
                    i.Cells(0).Value = True
                End If
0 голосов
/ 29 июня 2018

Я думаю, что у вас есть заполненный DataGridView, и вы сравниваете его с DataTable из другого источника. Ваш подход к циклу по DataTable и сетке правильный. Сравнение значения DataTable с

Dgv.DataSource.Columns(0).Items.ToString()

не имеет смысла. Вы возвращаетесь к исходному объекту DataTable со свойством DataSource, затем к столбцу 0, затем к коллекции элементов, но столбец не имеет коллекции элементов.

Глядя на ваш DataGridView, кажется, что столбец, который вы хотите сравнить, - это ячейки (1), а не ячейки (0).

    If ds.Tables(0).Rows.Count() > 0 Then
        For Each fon As DataRow In ds.Tables(0).Rows
            For Each row As DataGridViewRow In Dgv.Rows
                If fon(0).ToString = row.Cells(1).ToString() Then
                    row.Cells("col_check").Value = True
                End If
            Next
        Next
    End If

У меня нет сетки с удобными флажками, поэтому я не могу проверить код.

...