как я могу получить все возражения из выбранной строки в datagridview без отображения идентификатора объекта -c # - PullRequest
0 голосов
/ 24 июня 2019

У меня есть dgv, и я связал его следующим образом: dgviewOrders.DataSource = Orders но я хотел бы отображать объекты без их идентификатора, и когда я выбираю строку, я хочу получить весь объект, потому что это то, что мой учитель попросил меня сделать, но я не смог этого сделать

//i tried this code: 
var _bind = from a in Orders
            select new   OrderItem
            {
                ItemName = a.ItemName,
                Amount = a.Amount,
                Comment = a.Comment,
                Status = a.Status,
                TableNumber = a.TableNumber,
                Ordertime = a.Ordertime,
                Id = a.Id
            };
//dgviewOrders.DataSource = _bind.ToList(); 
dgviewOrders.DataSource = Orders;

и вот как я получаю выбранный объект: OrderItem currentObject = (OrderItem) row.DataBoundItem; но когда я комментирую идентификатор в ордерах, объект пуст

1 Ответ

0 голосов
/ 25 июня 2019

В 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;используйте отладчик для проверки

...