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