2011-10-31 99 views
1

我有gridview,它的數據源是list<string>,我添加了一個複選框列來選擇我想刪除的行然後我按刪除。從網格視圖編程刪除行

attachdatagrid.DataSource = ConceptProperties.conceptsattachmentsfilename[mouseOverIndex].Select(x => new { FileName = x }).ToList(); 

的問題是我的

gridview的編輯模式

性質是EditOnKeystroke,當我寫

if ((bool)dr.Cells[0].Value != false) 
         { 
          found = true; 
          ConceptProperties.conceptsattachments[mouseeditIndex].RemoveAt(dr.Index); 
          ConceptProperties.conceptsattachmentsfilename[mouseeditIndex].RemoveAt(dr.Index); 
          attachdatagrid.Rows.RemoveAt(dr.Index); 
         } 

我得到異常:

除非DataGridView是 數據綁定到支持更改通知的IBindingList並且允許刪除 ,否則無法以編程方式刪除行。

我該如何刪除該行?

回答

2

你最好把你的網格綁定到一個綁定源,並對它進行所有操作(綁定源)而不是列表本身。 您可以通過將綁定源組件放到窗體中,然後將其數據源設置爲列表,並將網格的數據源設置爲綁定源來實現。

IList不支持更改通知。 IBindingList(綁定源實現)的確如此。

0

就你的情況而言,應該是,足以從列表中移除所需的數據,並將其綁定到網格後,列表中的更改將自動在UI控件上傳播。

換句話說:不要叫attachdatagrid.Rows.RemoveAt(dr.Index)

希望這有助於。

+0

我試過這個,但網格沒有受到影響 – kartal

+1

@salamonti:你是否嘗試重新分配改變的列表?我看到你使用了ToList(),這個方法創建了原始的COPY,所以你所做的改變不會影響實際綁定到控件的列表。重新分配給DataGrid,就像提供的代碼的第一行一樣。 – Tigran

+0

,但是如果我有多行檢查行,它將只刪除第一行,因爲它會再次初始化網格數據源,因此它們將被取消選中。 – kartal