我是C#的新手。我想创建一个带有组合框和dataGridView的窗体。我根据组合框中的选定值填充dataGridView。到现在为止还挺好。但是当我更改组合框的值时,尝试重新加载dataGridView的内容,如下所示:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedValue != null)
{
if (ds.Tables.Contains("Leagues"))
{
ds.Tables["Leagues"].Clear(); // <-- error happens here
}
leagues_adapter.SelectCommand.Parameters[0].Value = comboBox1.SelectedValue;
main.InsertCommand.Parameters[0].Value = comboBox1.SelectedValue;
leagues_adapter.Fill(ds, "Leagues");
}
}
当调用myDataSet.Tables["myTable"].Clear()
时,我得到一个DataGridView默认错误对话框:
System.IndexOutOfRangeException:索引0没有值 在System.Windows.Forms.ConcurrencyManager.get_Item(Int32 System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32)的索引) rowIndex位置)。要替换此默认对话框,请处理DataError事件。
我也有一个OK按钮。
仅当我想将组合框的内容从某个值更改为其他值时才会发生这种情况。 但是,如果我多次点击OK按钮,我会看到每次点击时,一行和一列中的元素被逐一删除,当我使用OK按钮消耗所有元素时,我终于明白了想要的:dataGridView中包含新数据。请帮助我,任何答案表示赞赏。提前谢谢。
答案 0 :(得分:3)
清除绑定并在重新加载数据后重新设置它:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
dataGridView.DataSource = null;
// Reload data with the code in your question.
dataGridView.DataSource = // same code as you are using right
// now for setting the binding
}
答案 1 :(得分:0)
如果将dataTable用作dataGridView的数据源,则无法清除它。