2015-08-24 101 views
0

我有一個DataGridView,如another questionAllowUserToDeleteRows設置爲trueDataGridView不允許用戶刪除行

docsIBindingList.AllowRemove也應該設置爲true。不過,一個List似乎並沒有那個接口,而且它似乎並不需要呢。一個可以從列表中刪除項目。

A similar question's answer建議將DataGridView.EditMode設置爲EditOnKeystroke。但是這並沒有幫助。

所以 - 我怎樣才能讓它允許用戶刪除行?

+0

可能重複的[Dat aGridView刪除行時,數據源是列表](http://stackoverflow.com/questions/21572273/datagridview-delete-row-when-datasource-is-listmyclass) – manji

回答

1

我能沒有問題將其刪除:

 private void Form1_Load(object sender, EventArgs e) 
     { 
      myDataListBindingSource.DataSource = new MyDataList(); 
     } 

    public class MyDataList : List<MyData> 
    { 
     public MyDataList() 
     { 
      Add(new MyData { ID = 1, Name = "Name 1" }); 
      Add(new MyData { ID = 2, Name = "Name 2" }); 
      Add(new MyData { ID = 3, Name = "Name 3" }); 
      Add(new MyData { ID = 4, Name = "Name 4" }); 
      Add(new MyData { ID = 5, Name = "Name 5" }); 
     } 
    } 

public class MyData 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

編輯:或者,如果你想要做手工,而不使用VS設計師

public partial class Form1 : Form 
{ 
    BindingSource myDataListBindingSource; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     myDataListBindingSource = new BindingSource(); 
     myDataListBindingSource.DataSource = new MyDataList(); 
     dataGridView1.DataSource = myDataListBindingSource; 
    } 
} 

結果:

enter image description here

+0

謝謝。使用'BindingSource'作爲中間人解決了這個問題。 – ispiro

+0

真棒,感謝您的綠色檢查。 – jsanalytics

0

從我能看到你正在使用一個通用List作爲數據源到DataGridView。我不認爲有可能以這種方式自動刪除行。你可以將List替換爲BindingList,並按照文檔所述進行操作,或者在用戶試圖刪除該行時設置監聽器,將DataSource設置爲null,將列表中的條目從列表中刪除,然後再次將該列表分配給數據源無效以強制DataGridView重繪)。