Событие DataGridView CellEndEdit не обновляет ни одну ячейку, кроме первой - PullRequest
1 голос
/ 27 февраля 2012

Я очень запутался и потратил много времени, пытаясь отладить это событие.У меня есть столбец, и я хочу добавить первые 3 ячейки в столбце и обновить 4-ю ячейку, чтобы она стала суммой первых 3.

Это работает при первом заполнении первых 3 ячеек.После этого, если я попытаюсь изменить какую-либо ячейку снова, четвертая ячейка не изменит свое значение.ТОЛЬКО работает, если я редактирую 1-ю ячейку.

Кто-нибудь знает, почему это происходит?Вот небольшая часть моего кода, которая делает это:

int sum = 0;
for (int i = 0; i < 3; i++)
{
  if (dataGridView1.Rows[i].Cells[1].Value == null)
    sum += 0;
  else
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) *  int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString());
}
dataGridView1.Rows[3].Cells[1].Value = sum;

Эти строки кода находятся в функции dataGridView1_CellEndEdit, поэтому происходит после того, как я изменяю значение ячейки.

1 Ответ

1 голос
/ 31 мая 2012

Несколько замечаний по этому поводу, которые, вероятно, следует подтвердить / исправить.

if (dataGridView1.Rows[i].Cells[1].Value == null)
    sum += 0; 
else
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) * 
        int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString());

Что вы делаете с этой строкой?Здесь вы проверяете значение во втором столбце рассматриваемой строки, но затем добавляете только элементы из первого столбца (и умножаете каждый на некоторое число из первого ряда, второго столбца).Это не совсем понятно, что вы пытаетесь сделать.Это одна из трудностей, возникающих при работе с DataGridView, состоит в том, что существует гораздо больше догадок, чем изменение связанного источника данных.Например, вы уверены, что столбец (индексы) действительно ссылаются на интересующие вас элементы?Вы держите это последовательным?Кроме того, я считаю, что событие CellEndEdit срабатывает только тогда, когда фокус теряется из определенной ячейки после редактирования.

Я собираюсь дать некоторый модифицированный код, но, не зная дополнительной информации, я мог бы просто получитьэто неправильно.Исходя из того, что вы сказали, вам нужна только сумма первых 3 значений столбца, поэтому этот код и делает.Если это не так, пожалуйста, скажите мне, и я исправлю это (если смогу).

// Note: Using DataGridView[int col, int row] syntax
int sum = 0;

for (int i = 0; i < 3; i++)
{
    if (dataGridView1[1,i] != null)
        sum += int.Parse(dataGridView1[1,i].ToString());
}

dataGridView1[1,3] = sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...