问题设置DataGridView的DataSource

yon*_*236 2 c# winforms

这里发生的是当窗体打开时,它显示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
}
Run Code Online (Sandbox Code Playgroud)

我尝试在我的表单中添加另一个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);
Run Code Online (Sandbox Code Playgroud)

加载Form1时,contextMenuStrip1弹出窗口,dataGridView1作为项添加到它,使dataGridView1在窗体中消失,dataGridView2只保留在Form1中.

当我打button1的dataGridView2改变来自其新的内容基础DataSource(dataSet2),而dataGridView1仍然显示的值dataSet1.我注意到的是当时间dataGridView1被添加到ToolStripHost,并使其成为一个项目时contextMenuStrip1,控件的DataSource属性DataGridView不再被更改.不像dataGridView2我没有加入的形式contextMenuStrip1.

kbr*_*ton 6

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

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

dataGridView1.BindingContext = this.BindingContext;
Run Code Online (Sandbox Code Playgroud)

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