如何在不显示对象ID -c#的情况下从datagridview中的选定行获取整个对象

时间:2019-06-24 06:30:11

标签: c# object datagridview selected

我有dgv,我像这样dgviewOrders.DataSource = Orders绑定它 但是我想显示没有ID的对象,当我选择一行时,我想获取整个对象,因为这是我的老师要求我做的,但我做不到

//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; 但是当我在订单中评论ID时,对象为空

1 个答案:

答案 0 :(得分:0)

DataGridView默认将AutogenerateColumns设置为true。这意味着当绑定到数据源时,它将使用DataColumn对象填充dgViewOrders.Columns集合

不显示列有两种选择:

  • autogeneratecolumns设置为false,然后自己手动填充列集合,不要包含您不想看到的列

  • autogeneratecolumns保留为真,并在绑定对象并生成列之后,隐藏不需要的对象(`dgViewOrders.Columns [“ Id”]。Visible = false;)

This MSDN article提供了更多信息,但实际上是上面的那行代码


  

当我选择一行时,我想获取整个对象

要检索当前选定的某行的数据绑定项,您有两种选择:

datagridview.CurrentRow

这将返回对包含当前单元格的datagridviewrow的引用。当前单元格是一个带有淡淡轮廓的单元格,如果您开始键入,它将获得键盘焦点。可以用光标移动它,而不必是选定的行

datagridview.SelectedRows

使用鼠标或通过按住shift键并使用光标键移动当前行的方式来返回您已选择(变为蓝色)的datagridviewrow的集合。如果DGV处于单行选择模式,则集合将只有一行。 DGV的selectionmode属性必须为fullrowselectrowheaderselect-如果将其设置为其他任何值,则将不会填充该集合

无论您选择以上哪种方法,都将获得一个或多个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中将包含其他内容;使用调试器进行检查