Правильный способ иметь DataGridView визуально отражать изменения в его DataSource
Скажи 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 ответа
Правильный способ для источника данных для реализации IBindingList
, вернуть true
за SupportsChangeNotification
и выпустить ListChanged
События. Тем не менее, AFAIK, а DataView
делает это...
Я уверен, что если вы 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. При нажатии кнопки он добавляет еще одну строку в саму таблицу данных. Я проверил это, и, несомненно, он появился в сетке без каких-либо проблем.