我有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时,对象为空
答案 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
属性必须为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中将包含其他内容;使用调试器进行检查