簡體   English   中英

DataGridView 獲取當前選中的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM