FastMember 将 datagridview CurrentRow 转换回 Object

Posted

技术标签:

【中文标题】FastMember 将 datagridview CurrentRow 转换回 Object【英文标题】:FastMember convert datagridview CurrentRow back to Objectt 【发布时间】:2020-11-05 23:16:09 【问题描述】:

我使用此代码将IEnumerable<Register> 转换为Datatable,以便在一个datagridview 中使用扩展功能。

DataTable table = new DataTable();
using (var reader = ObjectReader.Create(data))

   table.Load(reader);

现在我需要取回对象,例如单击行时。

private void dgRegisters_CellContentClick(object sender, DataGridViewCellEventArgs e)

   if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
   var register = ((DataGridView)sender).Rows[e.RowIndex].DataBoundItem as Register;

我不知道如何找回它var register。它总是null,因为它是DataRowView

【问题讨论】:

【参考方案1】:

实际对象从未被存储; ObjectReader 将类型公开为数据读取器,允许 DataTable 等消费者从中读取,但这并不意味着您可以轻松地重新获取原始对象。然而!您可以尝试使用 Dapper,它具有使用数据读取器和构造对象的能力;你可以创建一个阅读器通过DataTableReader传递给Dapper。

【讨论】:

谢谢。如果我至少可以得到 '((DataRowView)senderGrid.Rows[e.RowIndex].DataBoundItem).ObjectID' 那么我可以使用 id 从初始列表中获取相同的对象。 @miguelmpn 如果那是一列,那么确定:您可以通过 DataRowView API 访问它 - 大概是 theRow["ObjectID"] 但是ObjectID无法访问,我再试试其他策略,谢谢

以上是关于FastMember 将 datagridview CurrentRow 转换回 Object的主要内容,如果未能解决你的问题,请参考以下文章

fasterflect-vs-hyperdescriptor-vs-fastmember-vs-reflection/

快速会员使用

如何将DataGridView转换为DataTable?

将datagridview鼠标选中一行读出数据~~在线等

以编程方式将新列添加到 DataGridView(填充有 DataTable 的 DataGridview)

如何将 DataGridView 组合框添加到绑定的 DataGridView 数据源(以编程方式)