假设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
。但这看起来很奇怪。我也相信还有其他几种方式。但是,正确的官方方式是什么?
答案 0 :(得分:4)
正确的方式是让数据源实现IBindingList
,为true
返回SupportsChangeNotification
,并发出ListChanged
个事件。但是,AFAIK,DataView
确实这个......
答案 1 :(得分:2)
我很确定如果您将DataGridView绑定到DataTable的DefaultView,并且Table更改,则更改会自动反映在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。单击按钮,它会向DataTable本身添加另一行。我测试了它,果然它在网格中出现没有任何问题。