Member 12561559 Ответов: 2

Обновление одного столбца в таблице данных в памяти


У меня есть datatable в памяти, который имеет много столбцов, которые я рисую из разных таблиц в базе данных SQL. Я мог бы сделать это с помощью внутренних или левых соединений, но накладные расходы огромны, Когда кто-то не хочет все столбцы, поэтому я использую datatable (без участия набора данных). Все работает замечательно, пока я не хочу обновить одну из колонок.

Я погуглил ключевые слова для своего вопроса, а также посмотрел на проект кода, но я не вижу, что мне нужно (если только он не похоронен среди других подобных вопросов).

Код, который я использую, приведен ниже, заимствован с веб-сайта Microsoft, хотя он действительно ожидает, что у него будет набор данных, пропуская эту часть, IDE говорит, что все в порядке, пока я действительно не запущу его.

Что я уже пробовал:

Dim MyRow() As Data.DataRow
               MyRow = Facility_Table.Select("FacilityNameRef=123")
               MyRow(0)("Locked") = 0


(ссылка, помещенная здесь, является просто фиктивной, но я знаю, что ссылка существует в datatable, как только она заполнена, и я могу видеть это из datagridview, который я привязал к datatable.

CHill60

"но накладные расходы огромны, Когда кто - то не хочет все столбцы" - тогда не возвращайте все столбцы-это моя первая мысль.
Вы говорите, что все в порядке, пока вы не запустите его, но вы не сказали, в чем проблема на самом деле. Действительно ли MyRow содержит что-либо и не должно ли это быть MyRow("Locked") = 0 (предполагая, что у вас есть столбец с именем Locked)

Member 12561559

используя свой код, я получаю: ссылка на объект не установлена на экземпляр объекта - Я знаю, что объект существует, поскольку я его заполнил. хотя, возможно, где - то на этом пути я скучаю.

Я пытаюсь обновить datatable - из другой формы,
facility_table datatable объявляется в одной форме следующим образом:
Friend Facility_Table Как Новый DataTable

и я обновляю его с помощью (например):

Dim MyRow() As Data.DataRow
MyRow = Form2.Facility_Table.Select("FacilityNameRef=123")
MyRow(0)("Заблокировано") = 0

и используя только MyRow("Locked") = 0 в соответствии с вашей рекомендацией, я получаю красное подчеркивание в IDE, говорящее: "integer не может быть преобразован в datarow)

2 Ответов

Рейтинг:
8

Maciej Los

Цитата:
Обновление одного столбца в таблице данных в памяти
...
Dim MyRow() As Data.DataRow
MyRow = Facility_Table.Select("FacilityNameRef=123")
MyRow(0)("Locked") = 0



Что ж...
Вы не можете обновить один столбец (все строки в этом столбце) таким образом, потому что объект DataTable.метод Select[^] возвращает массив строк. Вы должны перебирать строки в коллекции, чтобы иметь возможность изменять их значения.

Dim MyRows() As Data.DataRow = Facility_Table.Select("FacilityNameRef=123")
For Each r As Data.DataRow in MyRows
    r("ColumnName") = 0
    'or
    'r.Item("ColumnName") = 0
Next


Рейтинг:
2

dnibbo

Я думаю тебе нужно сказать

MyRow(0).Item("Locked") = 0