首页 文章

问题设置DataGridView的DataSource

提问于
浏览
2

这里发生的是当窗体打开时,它显示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中 .

当我点击 button1dataGridView2 从其新的 DataSourcedataSet2 )更改其内容库,而dataGridView1仍然显示 dataSet1 的值 . 我注意到的是当时间 dataGridView1 被添加到 ToolStripHost ,并使其成为 contextMenuStrip1 中的项目时, DataGridView 控件的 DataSource 属性不再被更改 . 与 dataGridView2 不同,它保留在我没有添加到 contextMenuStrip1 的形式中 .

2 回答

  • 6

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

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

    dataGridView1.BindingContext = this.BindingContext;
    

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

  • -3

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

    所以在此之后:

    dataGridView1.DataSource = ds;
    

    尝试添加这个:

    dataGridView1.DataBind();
    

相关问题