簡體   English   中英

將List <T>綁定到DataGridView

[英]Binding List<T> to DataGridView

我試圖將List<T>綁定到DataGridView 在實現刪除行之前,一切似乎都沒問題:

Companies.CompaniesList.RemoveAt(dataGridView1.SelectedRows[0].Index);
dataGridView1.DataSource = Companies.CompaniesList;

(Companies.Companies是List<Company> collection)我得到的是數據錯誤消息(雖然行已成功刪除)。 我試過這個:

Companies.CompaniesList.RemoveAt(dataGridView1.SelectedRows[0].Index);
bs = new BindingSource();
bs.DataSource = Companies.CompaniesList;
dataGridView1.DataSource = bs;

它按預期工作。 問題是:為什么?

屬性更改(通過set )通常會檢測並忽略不執行任何操作的更改,因此在行中:

dataGridView1.DataSource = Companies.CompaniesList;

我希望DataSource 已經Companies.CompaniesList ,所以什么都沒發生。 除了測試引用外,沒有執行任何代碼。 檢入反射器確認這個( DataGridView.DataSource ):

set
{
    if (value != this.DataSource)
    {
        ...
    }
}

因此它只在更新引用時執行任何操作

此外,由於List<T>沒有實現必要的綁定接口,因此網格不知道列表內容已被更改,因此錯誤。 對比:

bs = new BindingSource();
bs.DataSource = Companies.CompaniesList;
dataGridView1.DataSource = bs;

這里, DataSource 已經改變,因為bs是一個全新的對象。 這會導致整個網格重新綁定。

另一種選擇是使用BindingList<T> ,或從BindingSource (而不是List<T> )中刪除,它應該在兩個方向上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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