2010-08-14 6 views
2

Что происходит здесь, когда в форме открывается, он показывает contextMenu и отображает DataGridView на нем со значением dataSet1. Но когда я нажимаю кнопку, чтобы изменить DataSource Grid, она не отображает записи dataSet2.Устранение неполадок DataSource DataGridView

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 изменяет свою базу от содержимого своего нового DataSource (dataSet2), в то время как dataGridView1 еще отображает значение dataSet1. То, что я заметил, когда dataGridView1 добавляется в ToolStripHost и делает его предметом в contextMenuStrip1, имущество DataSourceDataGridView не изменилось. В отличие от dataGridView2, который остается в том виде, который я не добавил к contextMenuStrip1.

ответ

6

Это мне потребовалось некоторое время, но я нашел его. Элементы управления в ToolStripControlHost, похоже, не назначены BindingContext, которые проходят через регулярное дерево управления.

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

dataGridView1.BindingContext = this.BindingContext; 

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

+0

спасибо, сэр, я попробую. – yonan2236

+0

Он работает! хе-хе, я очень благодарен, спасибо ...:) – yonan2236

+0

Ницца. Но какова концепция этого, т. Е. За поведением? – TheBlastOne

-3

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

Таким образом, после этого:

dataGridView1.DataSource = ds; 

попробуйте добавить следующее:

dataGridView1.DataBind(); 
+0

Если я не ошибаюсь, элемент управления DataGridView не имеет свойства DataBind. Но GridView в ASP.Net – yonan2236

+0

Упс. Извините за мою ошибку Yonan. Рад, что ты заработал. – BluMunky

Смежные вопросы