问题设置DataGridView的DataSource

时间:2010-08-14 02:01:24

标签: c# winforms

这里发生的是当窗体打开时,它显示contextMenu并在其上显示DataSet的值为dataSet1。但是当我单击按钮更改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更改其内容基础时,新的DataSourcedataSet2),而dataGridView1仍然显示dataSet1的值}。 我注意到的是将时间dataGridView1添加到ToolStripHost,并将其作为contextMenuStrip1中的项目,DataSource属性DataGridView控制权不再被改变。与我未添加到dataGridView2的格式中保留的contextMenuStrip1不同。

2 个答案:

答案 0 :(得分:6)

我花了一段时间,但我找到了它。 ToolStripControlHost中的控件似乎没有通过常规控制树分配BindingContext

您可以通过在SetDataSource方法的第一行添加以下内容来自行处理:

dataGridView1.BindingContext = this.BindingContext;

对于公平归因,我从this web page得到了这个想法,其中遇到了与ComboBox类似的情况。我在示例应用中使用您的代码对其进行了测试,以验证其是否有效。

答案 1 :(得分:-3)

只是更改控件的数据源并不能告诉它从该新数据源重新绑定(刷新)其数据。更改数据源后,需要执行控件的DataBind()命令。

所以在此之后:

dataGridView1.DataSource = ds;

尝试添加:

dataGridView1.DataBind();