我遇到了以下问题:我有一个“人物”对象列表“lst”,我使用Dataview对象将它们放在DataGridView中(我需要它用于过滤器)
DataTable dt = Request.ListToDataTable(lst);
dw = new DataView(dt);
dw.Sort = "age ASC";
dataGridView1.DataSource = dw;
当我单击一个按钮时,我需要获取Person类的一个字段的值,该字段放在相对于所选行的隐藏列中。为此,我使用:
Person val = dataGridView1.SelectedRows[0].DataBoundItem as Person;
Debug.WriteLine(val.id);
但是当我运行程序时,结果是崩溃,可能是因为绑定项不是Person对象而是DataTable元素。有人可以指出我如何获得该元素?如果没有隐藏的柱子那就容易了,但这样我就无法弄清楚如何获得它! 感谢大家
答案 0 :(得分:4)
您将需要以下内容:
var row = dataGridView1.SelectedRows[0].DataBoundItem as DataRow;
var val = row[X] as MyType;
第二次尝试:
var drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView;
var row = drv.Row as DataRow;
var val = row[X] as MyType;
答案 1 :(得分:4)
这是因为,您将DataView绑定到DataGridView,因此项集合将是DataRowView类型,以便正确地获取它。
DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView ;
Now get the associated Row
if(drv != null)
{
DataRow row = drv.Row;
// Now get the respective column value say PersonId and assuming PersonId is a column in the bounded DataView
if(row!=null)
{
var personId = row["PersonId"];
}
}