Как удалить выбранную строку, когда сетка данных привязана к списку <T> - PullRequest
0 голосов
/ 15 мая 2019

Я хочу удалить выбранные строки из 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 Ответ

0 голосов
/ 15 мая 2019

Вместо привязки 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; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...