Так как у Вас есть динамические значения, необходимо использовать ЕСЛИ или СЛУЧАЙ для столбцов, которые будут обновлены. Это становится довольно ужасным, но это должно работать.
Используя Ваш пример, Вы могли сделать это как:
UPDATE table SET Col1 = CASE id WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 4 THEN 10 ELSE Col1 END, Col2 = CASE id WHEN 3 THEN 3 WHEN 4 THEN 12 ELSE Col2 END WHERE id IN (1, 2, 3, 4);
Установка CurrentCell
с последующим вызовом BeginEdit (true)
мне подходит.
В следующем коде показан обработчик событий для ] KeyDown
, которое устанавливает редактируемую ячейку.
Мой пример реализует только одно из требуемых переопределений нажатия клавиш, но теоретически остальные должны работать так же. (и я всегда настраиваю ячейку [0] [0] как доступную для редактирования, но любая другая ячейка должна работать)
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab && dataGridView1.CurrentCell.ColumnIndex == 1)
{
e.Handled = true;
DataGridViewCell cell = dataGridView1.Rows[0].Cells[0];
dataGridView1.CurrentCell = cell;
dataGridView1.BeginEdit(true);
}
}
Если вы не нашли его ранее, FAQ по DataGridView - отличный ресурс , написанный менеджером программ для элемента управления DataGridView, который охватывает большую часть того, что вы можете делать с этим элементом управления.
Хорошо, я бы проверил, любой из ваших столбцов установлен как Только для чтения
. Мне никогда не приходилось использовать BeginEdit, но, возможно, есть какое-то законное использование. После того как вы выполнили dataGridView1.Columns [".."]. ReadOnly = False;
, поля, которые не являются ReadOnly
, должны стать редактируемыми. Вы можете использовать событие DataGridView CellEnter
, чтобы определить, какая ячейка была введена , а затем включить редактирование этих ячеек после того, как вы передали редактирование из первых двух столбцов в следующий набор столбцов и отключите редактирование двух последних столбцов.