我有一个绑定到DataTable的DataGridView。 DataTable中的数据显示在图表中(我使用的是Microsoft Charting)。用户在DataGridView中编辑单元格后,将验证该值,然后保存在DataTable中。这是自动完成的(数据绑定机制负责这一点)并且工作得很好。
我的问题如下:当用户按下某个键时,我需要将值发送到DataTable,而不会使单元格退出编辑模式。我需要这个,所以我可以“实时”方式更新图表。
我尝试过这样的事情:
void infoDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyUp += new KeyEventHandler(Control_KeyUp);
}
void Control_KeyUp(object sender, KeyEventArgs e)
{
this.Validate();
UpdateChart();
}
void infoDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyUp += new KeyEventHandler(Control_KeyUp);
}
void Control_KeyUp(object sender, KeyEventArgs e)
{
this.Validate();
UpdateChart();
}
这是属于表单的代码的一部分。
但这会从编辑模式中取出当前单元格。也许我可以在数据表中手动设置值,但在我不知道正在编辑哪个单元格。
如果您有更好的想法,请不要犹豫,分享。 :)
答案 0 :(得分:1)
使用CurrentCellDirtyStateChanged事件
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if(dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
这会将单元格值发送到DataTable,而不会使单元格退出编辑。
答案 1 :(得分:0)
瑞摩斯,
这样的事情:
private void infoDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
dataTable.Rows[e.RowIndex].ItemArray[e.ColumnIndex] = infoDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
UpdateChart();
}
这里的优点是更新数据表和图表而无需触及datagridview(因此您不必担心编辑模式等)。
答案 2 :(得分:0)
您可以再次提交更改并重新开始,而不是再次验证整个datagridview,如下所示:
void Control_KeyUp(object sender, KeyEventArgs e)
{
dataGridView1.EndEdit();
UpdateChart();
dataGridView1.BeginEdit(false);
}