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/