Как удалить выбранную строку, когда сетка данных привязана к списку <T>

Я хочу удалить выбранные строки из datagridview и моя сетка была привязана к List<T> . Я написал код, который называется бросая ошибка

Строки не могут быть удалены программным путем, если DataGridView не привязан к данным к IBindingList, который поддерживает уведомление об изменении и позволяет удалять

Это мой полный пример кода, который я пробовал, но он не работает.

public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        List<person> _person = null;
        private void Form3_Load(object sender, EventArgs e)
        {
            _person =new List<person>();
            _person.Add(new person { ID = 1, Name = "Tridip" });
            _person.Add(new person { ID = 2, Name = "Sujit" });
            _person.Add(new person { ID = 3, Name = "Arijit" });

            dgLogList.DataSource = _person;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow dvr in dgLogList.SelectedRows)
            {
                if (dvr != null)
                {
                    _person.RemoveAt(dvr.Index);
                    dgLogList.DataSource = _person.ToList();
                }
            }

        }
    }

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

Поэтому, пожалуйста, скажите мне, как я могу удалить выбранные строки из datagridview когда она привязана к List<T> .

Всего 1 ответ


Вместо привязки DataGridViewRow к вашему списку, привязать его к экземпляру BindingSource. BindingSource действует как посредник между вашей сеткой и списком. Также обязательно вызовите метод Refresh () после удаления ваших строк. Вот ваш код, включая обновления.

public partial class Form1 : Form
{
    private BindingSource _source = new BindingSource();
    List<person> _person = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _person = new List<person>();
        _person.Add(new person {ID = 1, Name = "Tridip"});
        _person.Add(new person {ID = 2, Name = "Sujit"});
        _person.Add(new person {ID = 3, Name = "Arijit"});
        _source.DataSource = _person;
        dgLogList.DataSource = _source;

    }

    private void Button1_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow dvr in dgLogList.SelectedRows)
        {
            if (dvr != null)
            {
                dgLogList.Rows.Remove(dvr);
                dgLogList.Refresh();
            }
        }
    }
}

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

Есть идеи?

10000