2015-08-24 2 views
0

У меня есть DataGridView, как в another question, а AllowUserToDeleteRows - true.DataGridView не позволяет пользователю удалять строку

docs говорят, что IBindingList.AllowRemove также должны быть установлены на true. Тем не менее, у List нет похожего интерфейса, и ему не кажется необходимо. Один может удалить элементы из списка.

A similar question's answer предлагает установить DataGridView.EditMode на номер EditOnKeystroke. Но это не помогает.

Итак - Как я могу заставить пользователя удалить строки?

+0

Возможный дубликат [DataGr idView удалить строку, когда DataSource - это список ] (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; } 
    } 

EDIT: или, если вы хотите сделать это вручную, без использования 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

Из того, что я вижу, вы используете общий список в качестве источника данных для DataGridView. Я не думаю, что можно автоматически удалять строки таким образом. Вы можете заменить List на BindingList и сделать так, как говорят документы, или иметь прослушиватель, когда пользователь пытается удалить строку, установить DataSource в null, удалить запись из списка, а затем снова назначить этот список для источника данных (и, возможно, invalidate, чтобы заставить DataGridView перерисовываться).

Смежные вопросы