问题设置DataGridView的DataSource
这里发生的是当窗体打开时,它显示contextMenu并使用dataSet1的值显示其上的DataGridView。 但是当我单击按钮更改Grid的DataSource时,它不会显示dataSet2的记录。
private void Form1_Load(object sender, EventArgs e) { SetDataSource(dataSet1);// A populated DataSet } protected void SetDataSource(DataSet ds) { dataGridView1.DataSource = ds; ToolStripControlHost tsHost = new ToolStripControlHost(dataGridView1); contextMenuStrip1.Items.Clear(); contextMenuStrip1.Items.Add(tsHost); contextMenuStrip1.Show(textBox1, 0, 27); } private void button1_Click(object sender, EventArgs e) { SetDataSource(dataSet2);// Another populated DataSet }
我尝试在我的表单中添加另一个DataGridView控件(dataGridView2),但这次我没有把它放在ToolStripControlHost中,我没有将它添加到contextMenuStrip1。
dataGridView1.DataSource = ds; dataGridView2.DataSource = ds; // <-- Parent of this is the Form1, the control is not added in the contextMenuStrip. ToolStripControlHost tsHost = new ToolStripControlHost(dataGridView1); contextMenuStrip1.Items.Clear(); contextMenuStrip1.Items.Add(tsHost); contextMenuStrip1.Show(textBox1, 0, 27);
加载Form1时,contextMenuStrip1弹出窗口,dataGridView1作为项添加到它,使dataGridView1在窗体中消失,dataGridView2只保留在Form1中。
当我点击button1
, dataGridView2
从其新的DataSource
( dataSet2
)更改其内容库,而dataGridView1仍然显示dataSet1
的值。 我注意到当dataGridView1
被添加到ToolStripHost
,并使其成为contextMenuStrip1
的Item时, DataGridView
控件的DataSource
属性不再被更改。 与dataGridView2
不同, dataGridView2
保留在我没有添加到contextMenuStrip1
的表单中。
我花了一段时间,但我发现了它。 ToolStripControlHost
控件似乎没有被赋予通过常规控件树承载的BindingContext
。
您可以通过将以下内容添加到SetDataSource
方法的第一行来自行处理:
dataGridView1.BindingContext = this.BindingContext;
对于公平归因,我从这个网页得到了这个想法,其中遇到了与ComboBox类似的情况。 我在示例应用程序中使用您的代码对其进行了测试,以validation其是否有效。
只是更改控件的数据源并不能告诉它重新绑定(刷新)来自该新数据源的数据。 更改其数据源后,需要执行控件的DataBind()命令。
所以在这之后:
dataGridView1.DataSource = ds;
尝试添加这个:
dataGridView1.DataBind();