gpt4 book ai didi

c# - 使用 DataGridViewRow.DataBoundItem - 转换为可枚举对象?

转载 作者:太空宇宙 更新时间:2023-11-03 11:43:06 26 4
gpt4 key购买 nike

我有一个 DataGridView

myGridView.DataSource = GetSomeData()


// method called
public IQueryable GetSomeData()
{
var source = from r in records
select r;

return source; // made correction from 'r' to 'source'
}

GetSomeData() 按预期填充 DataGridView。用户将选择要编辑的行,然后将行数据传递给表单。由于 DataGridViewRow.DataBoundItem 是匿名类型,我如何传递 DataBoundItem

我有一半希望我的 DataBoundItem 是 IQueryable - 不正确。以下是来自调试器的关于 DataBoundItem 属性的信息:

DataBoundItem { CustomerID = "3133", Last_Name = "Smith", First_Name = "John", AccountNumber = "JS3133", ActiveYN = True } < Anonymous Type >

将数据传递到新表单后,我想做类似的事情:

txtFName.Text = SomeEnumeratedObject["First_Name"];
txtLName.Text = SomeEnumeratedObject["Last_Name"];

关于如何执行此操作的任何想法? IMO,如果新窗体上的控件可以某种方式绑定(bind)到 SomeEnumeratedObject,那就更好了。

是否可以使用 LINQ 查询 DataBoundItem

编辑:

改变方法:

public DataView GetSomeData()
{
var source = from r in records
select r;

DataTable table = ToDataTable(myContext, source);
return new DataView(table);
}

查看完整解决方案 here .

最佳答案

您可以将其作为 dynamic 传递并以这种方式访问​​属性:

public void Test(dynamic item)
{
MessageBox.Show(string.Format("{0} : {1}", item.First_Name, item.Last_Name));
textBox1.DataBindings.Add("Text", _item, "First_Name");
textBox2.DataBindings.Add("Text", _item, "Last_Name");
}

需要考虑的一件事是匿名类型的属性是只读的,因此您的用户将无法以这种方式编辑值。来自 C# 语言规范:

The members of an anonymous type are a sequence of read-only properties inferred from the anonymous object initializer used to create an instance of the type.

您应该考虑为此声明一个类型,而不是使用匿名类型。这样,您还可以获得智能感知的好处,并且能够毫无问题地重命名/重构您的属性。

关于c# - 使用 DataGridViewRow.DataBoundItem - 转换为可枚举对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com