Проблема получения значения из ячейки DatagridView - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть DataGridView, который связан с DataTable.Данные в DataTable отображаются в виде диаграммы (я использую Microsoft Charting).После того, как пользователь отредактировал ячейку в DataGridView, значение проверяется и сохраняется в DataTable.Это делается автоматически (механизм привязки данных позаботится об этом) и работает просто отлично.

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

Я пробовал что-то вроде этого:

</p> <pre><code> void infoDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { e.Control.KeyUp += new KeyEventHandler(Control_KeyUp); } void Control_KeyUp(object sender, KeyEventArgs e) { this.Validate(); UpdateChart(); }

Это часть кода, принадлежащая форме.Но это выводит текущую ячейку из режима редактирования.Возможно, я мог бы вручную установить значение в datatable, но в Control_KeyUp я понятия не имею, какая ячейка редактируется.

Если у вас есть лучшие идеи, пожалуйста, не стесняйтесь поделиться ими.:)

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Использовать событие CurrentCellDirtyStateChanged

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
   if(dataGridView1.IsCurrentCellDirty)
   {
      dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
   }
}

Это отправляет значение ячеек в DataTable без вывода ячейки из редактирования.

0 голосов
/ 17 февраля 2011

Вместо повторной проверки всей таблицы данных, не могли бы вы просто зафиксировать изменения и начать их заново, так что-то вроде этого:

void Control_KeyUp(object sender, KeyEventArgs e)
{
   dataGridView1.EndEdit();
   UpdateChart();
   dataGridView1.BeginEdit(false);
}
0 голосов
/ 16 февраля 2011

Remus,

А что-то вроде этого:

private void infoDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
   dataTable.Rows[e.RowIndex].ItemArray[e.ColumnIndex] = infoDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
   UpdateChart();
}

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

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