Правильный способ иметь DataGridView визуально отражать изменения в его DataSource - PullRequest
1 голос
/ 10 марта 2009

Скажем, DataGridView имеет свойство DataSource, установленное в DataView экземпляр.

DataGridView dgv;
DataTable dt;

// ... dt gets populated.

DataView dv = dt.DefaultView;

dgv.DataSource = dv;

// ... dt gets modified

// The DataGridView needs to update to show these changes visually
// What goes here?

Я знаю, что вы можете установить dgv.DataSource на null, а затем вернуться к dv. Но это кажется довольно странным. Я уверен, что есть и несколько других способов. Но какой правильный, официальный способ сделать это?

Ответы [ 2 ]

4 голосов
/ 10 марта 2009

Правильный способ - для источника данных реализовать IBindingList, вернуть true для SupportsChangeNotification и выдать ListChanged события Однако, AFAIK, DataView делает это ...

2 голосов
/ 10 марта 2009

Я уверен, что если вы DataGridView привязаны к DefaultView объекта DataTable, и таблица изменится, изменения автоматически отобразятся в DataGridView. Вы пробовали это и у вас есть проблемы? Опубликуйте код, который обновляет DataTable, возможно, что-то еще не так. На самом деле, вот небольшой пример приложения, которое я только что написал:

public partial class Form1 : Form
    {
        private DataTable table;

        public Form1()
        {
            InitializeComponent();
            table = new DataTable();
            this.LoadUpDGV();
        }

        private void LoadUpDGV()
        {
            table.Columns.Add("Name");
            table.Columns.Add("Age", typeof(int));

            table.Rows.Add("Alex", 27);
            table.Rows.Add("Jack", 65);
            table.Rows.Add("Bill", 22);
            table.Rows.Add("Mike", 36);
            table.Rows.Add("Joe", 12);
            table.Rows.Add("Michelle", 43);
            table.Rows.Add("Dianne", 67);

            this.dataGridView1.DataSource = table.DefaultView;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            table.Rows.Add("Jake", 95);
        }
    }

Обычно, когда форма загружается, она просто заполняет таблицу именами и возрастами. Тогда это связывает это с DGV. При нажатии кнопки добавляется еще одна строка в саму таблицу данных. Я проверил это, и, несомненно, он появился в сетке без каких-либо проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...