我需要从da dataatab DataGridView获取当前选中的对象。
我不需要当前所选单元格的对象,而是整个行所基于的对象,在这种情况下,BusinessObject属性构成网格的列。
我可以查看DataSource,但它本身只是一个对象,可以是BindingSource或IBindingList或类似的东西 - 所以不容易标准化的方式来获取想要的对象。
在这之后需要检查businessObject以获取名为IsChanged的属性,并在绑定源选择下一个项之前要求用户保存或放弃更改。因此,我必须找到DataGridView的RowValidating-Event中的当前对象,因为BindingSource不提供在更改发生之前停止更改的事件。See here for the well known problem
感谢阅读; - )
答案 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,该行将为您提供修改后的标记。