2010-01-18 47 views
33

我需要從da databound DataGridView中獲取當前選定的對象。DataGridView獲取當前選定的對象

我不需要當前選定單元格的對象,而是整個行所基於的對象,在這種情況下,這是一個BusinessObject whos屬性用於生成網格的列。

我可以通過數據源,但它本身只是一個對象,可以是一個BindingSource或IBindingList或類似的東西 - 所以不容易的標準化的方式來獲得想要的對象。

之後,需要檢查名爲IsChanged的屬性的businessObject,並要求用戶在bindingsource選擇下一個項目之前保存或放棄更改。因此,我必須在DataGridView的RowValidating-Event內部找出當前對象,因爲BindingSource不會在發生更改之前提供停止更改的事件。 See here for the well known problem

感謝您閱讀;-)

回答

69

DataGridViewRow.DataBoundItem包含它綁定到 '生意' 的對象。

+4

你可以得到這樣

yourDGV.CurrentCell.Value; 

選定單元格的值謝謝你正確提示我,有時候應該放鬆一下,放鬆一下,而不是更強烈地搜索...... – 2010-01-18 09:55:18

+1

這比緩存數據然後嘗試使用th e選定的索引。謝謝! – styfle 2013-10-22 23:29:14

+0

只是想提一下,如果你的dataGrid沒有「綁定」到數據上,這也是有效的,但是如果你剛剛應用了'DataSource' – copa017 2015-10-01 21:16:33

6

這裏是我的代碼把這個到您的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; 
0

怎麼樣這樣?

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

我們可以得到多個選定的行數據。

0

由於您確實聲明瞭IBindingList - 是的,正如其他人所說的那樣,DataBoundItem屬性會給你你所需要的 - 這有一個問題,我以前經歷過,並以空引用結束,但現在我不能想想它發生的場景。

如果您使用BindingSource進行數據綁定 - 您可以捕獲BindingSource的CurrentChanged,CurrentItemChanged事件,那麼您的B.O.不需要額外的IsChanged屬性。 ..,底層數據源也可以指示修改 - 例如,如果您將BindingSource綁定到數據表,該行將爲您提供修改標誌。

1

如果你想在一個字符串形式的值只是使用的toString這樣

yourDGV.CurrentCell.Value.toString(); 

這應該這樣做

相關問題