使用DataView的DataBoundItem

时间:2010-12-28 10:21:27

标签: c# .net

我遇到了以下问题:我有一个“人物”对象列表“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元素。有人可以指出我如何获得该元素?如果没有隐藏的柱子那就容易了,但这样我就无法弄清楚如何获得它! 感谢大家

2 个答案:

答案 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"];
      }
  }