Проблема установки DataSource для DataGridView - PullRequest
2 голосов
/ 14 августа 2010

Что происходит здесь, когда в форме открывается, она показывает contextMenu и отображает в нем DataGridView со значением dataSet1.Но когда я нажимаю кнопку, чтобы изменить источник данных сетки, он не показывает записи 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, свойство DataSource элемента управления DataGridView больше не изменяется.В отличие от dataGridView2, который остается в форме, которую я не добавил к contextMenuStrip1.

Ответы [ 2 ]

6 голосов
/ 14 августа 2010

Мне потребовалось некоторое время, но я нашел это.Элементам управления ToolStripControlHost, по-видимому, не назначается BindingContext, переносимый через обычное дерево элементов управления.

Вы можете позаботиться об этом самостоятельно, добавив следующее в первую строку вашего SetDataSourcemethod:

dataGridView1.BindingContext = this.BindingContext;

Для честной атрибуции я получил идею от этой веб-страницы , где с ComboBox возникла похожая ситуация.Я проверил его в примере приложения с вашим кодом, чтобы убедиться, что он работает.

0 голосов
/ 14 августа 2010

Простое изменение источника данных элемента управления не говорит ему о необходимости повторной привязки (обновления) своих данных из этого нового источника данных.Вам нужно выполнить команду DataBind () элемента управления после изменения его источника данных.

Итак, после этого:

dataGridView1.DataSource = ds;

попробуйте добавить это:

dataGridView1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...