DataGridView获取当前选定的对象

时间:2010-01-18 09:27:21

标签: c# winforms datagridview

我需要从da dataatab DataGridView获取当前选中的对象。

我不需要当前所选单元格的对象,而是整个行所基于的对象,在这种情况下,BusinessObject属性构成网格的列。

我可以查看DataSource,但它本身只是一个对象,可以是BindingSource或IBindingList或类似的东西 - 所以不容易标准化的方式来获取想要的对象。

在这之后需要检查businessObject以获取名为IsChanged的属性,并在绑定源选择下一个项之前要求用户保存或放弃更改。因此,我必须找到DataGridView的RowValidating-Event中的当前对象,因为BindingSource不提供在更改发生之前停止更改的事件。See here for the well known problem

感谢阅读; - )

6 个答案:

答案 0 :(得分:76)

DataGridViewRow.DataBoundItem包含它所绑定的“业务”对象。

答案 1 :(得分:7)

这是我的代码将其放入您的Person类

 public static explicit operator Person(DataRow dr)
    {
        Person p = new Person();
        p.adi = dr.ItemArray[0].ToString();
        p.id = Int32.Parse(dr.ItemArray[1].ToString());
        p.soyadi = dr.ItemArray[2].ToString();
        p.kartNo = dr.ItemArray[3].ToString();
        p.dogumTarihi = DateTime.Parse( dr.ItemArray[4].ToString() );
        p.adres = dr.ItemArray[5].ToString();
        p.meslek = dr.ItemArray[6].ToString();
        p.telefon = dr.ItemArray[7].ToString();
        p.gsm = dr.ItemArray[8].ToString();
        p.eposta = dr.ItemArray[9].ToString();

        return p;
    }

这是一个更新按钮点击

DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row;
Person selected = (Person)row;

答案 2 :(得分:1)

您可以像这样获取所选的单元格值

yourDGV.CurrentCell.Value;

如果你想要String形式的值,只需使用像这样的ToString()方法

yourDGV.CurrentCell.Value.ToString();

这应该这样做

答案 3 :(得分:1)

您也可以使用这个短代码。

Person selected = dataGridView1.SelectedRows[0].DataBoundItem as Person;

答案 4 :(得分:0)

这是怎么回事?

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
  MessageBox.Show(item.Cells[0].Value.ToString());
}

我们可以获得多个选定的行数据。

答案 5 :(得分:0)

因为你确实声明了IBindingList - 是的,因为其他人已经说过DataBoundItem属性会给你你需要的东西 - 我之前遇到过它的一个问题,最后得到一个空参考但是现在我想不到它发生的场景。

如果您使用BindingSource进行数据绑定 - 您可以捕获BindingSource的CurrentChanged,CurrentItemChanged事件,那么您的B.O.上不需要额外的IsChanged属性。 ..,底层数据源也可以表示已修改 - 例如,如果绑定到数据表的BindingSource,该行将为您提供修改后的标记。