В DataGridView AutogenerateColumns
установлено по умолчанию true
.Это означает, что при заполнении коллекции dgViewOrders.Columns
объектами DataColumn при привязке к источнику данных
у вас есть два варианта, чтобы не отображать столбец:
set autogeneratecolumns
в false и заполните коллекцию столбцов вручную, не включая столбец, который вы не хотите видеть
оставьте autogeneratecolumns
как true, и после того, как вы связали свойобъект и столбцы были сгенерированы, скрыть тот, который вам не нужен (`dgViewOrders.Columns [" Id "]. Visible = false;)
Эта статья MSDN имеет больше информации, но, по сути, это строка кода выше
, когда я выбираю строку, я хочу получить весь объект
Toполучить текущий выбранный элемент привязки данных для строки, у которой есть несколько вариантов выбора:
datagridview.CurrentRow
Возвращает ссылку на таблицу данных, содержащую текущую ячейку.Текущая ячейка с тусклым контуром вокруг нее, которая получит фокус клавиатуры, если вы начнете печатать.Его можно перемещать с помощью курсора, и он НЕ обязательно является выбранной строкой
datagridview.SelectedRows
Возвращает коллекцию строк данных, которые были выделены (окрашены в синий цвет) с помощью мыши или удерживая Shift и перемещая текущую строку.с помощью клавиш курсора.Если ваш DGV находится в режиме выбора одной строки, коллекция будет иметь только одну строку.Ваше свойство DGV selectionmode
ДОЛЖНО быть fullrowselect
или rowheaderselect
- если для него установлено другое значение, коллекция не будет заполняться
. В зависимости от того, что вы выберете выше, вы получите один или несколькоDataGridViewRow
объектов.У них будет свойство .DataBoundItem
, которое, если вашим источником данных является DataTable, вероятно, будет DataRowView.Это, в свою очередь, будет иметь свойство .Row
, которое является вашим датором.Это будет либо строго типизированный (YourXyzNameHereDataRow), либо слабо типизированный (DataRow)
Следовательно, если вы используете таблицы данных, ваш код будет выглядеть примерно так:
'generic datatable
Dim dr as DataRow = DirectCast(DirectCast(dgViewOrders.CurrentRow.DataBoundItem, DataRowView).Row, DataRow)
'strongly typed datatable
Dim dr as OrdersDataRow = DirectCast(DirectCast(dgViewOrders.CurrentRow.DataBoundItem, DataRowView).Row, OrdersDataRow)
Если вы не используете таблицы данныхтогда это будет что-то еще в DataBoundItem;используйте отладчик для проверки