从DatagridView单元格获取值时出现问题

时间:2011-02-16 17:13:03

标签: c# charts

我有一个绑定到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(); }

这是属于表单的代码的一部分。 但这会从编辑模式中取出当前单元格。也许我可以在数据表中手动设置值,但在我不知道正在编辑哪个单元格。

如果您有更好的想法,请不要犹豫,分享。 :)

3 个答案:

答案 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);
}