[英]DataGridView get current selected object
我需要從數據綁定 DataGridView 中獲取當前選定的對象。
我不需要當前選定單元格的對象,而是整行所基於的對象,在本例中是一個 BusinessObject,其屬性構成了網格的列。
我可以查看數據源,但它本身只是一個對象,可以是 BindingSource 或 IBindingList 或類似的東西 - 所以不是簡單的標准化方法來獲取想要的對象。
在這之后,只需要檢查 businessObject 中名為 IsChanged 的屬性,並在 bindingsource 選擇下一項之前要求用戶保存或放棄更改。 因此,我必須在 DataGridView 的 RowValidating-Event 中找出當前對象,因為 BindingSource 不提供在更改發生之前停止更改的事件。 請參閱此處了解眾所周知的問題
感謝閱讀;-)
DataGridViewRow.DataBoundItem
包含它綁定到的“業務”對象。
這是我的代碼,將其放入您的 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;
您也可以使用此短代碼。
Person selected = dataGridView1.SelectedRows[0].DataBoundItem as Person;
這種方式呢?
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
MessageBox.Show(item.Cells[0].Value.ToString());
}
我們可以獲得多行選中的數據。
由於您確實聲明了 IBindingList - 是的,因為其他人已經說過 DataBoundItem 屬性將為您提供您需要的東西 - 我以前遇到過它存在一個問題,並以空引用結束,但現在我想不出這種情況它發生在其中。
如果您使用 BindingSource 進行數據綁定 - 您可以捕獲 BindingSource 的 CurrentChanged、CurrentItemChanged 事件,那么您的 BO .. 上不需要額外的 IsChanged 屬性,基礎數據源也可以指示已修改 - 例如,如果您有 BindingSource綁定到數據表的行會給你一個修改的標志。
您可以像這樣獲取選定的單元格值
yourDGV.CurrentCell.Value;
如果您想要字符串形式的值,只需使用這樣的 ToString() 方法
yourDGV.CurrentCell.Value.ToString();
這應該做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.