private void dgv_CellClick object sender DataGridViewCellEven tArgs оп

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private void dgv_CellClick(object sender, DataGridViewCellEventArgs e){ // определила событие нажатия мышкой на ячейку в гриде
ComboBox cmb1 = new ComboBox(); // инициализируешь
cmb1.DataSource = querry.getTable("select * from " + (col == "tech" ? "technique" : (col == "hall_id" ? "hall" : col)) + ";"); // даешь команду
cmb1.DisplayMember = "name"; // сказала, что показать
cmb1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; // определила стиль бокса( тут как захочешь)
cmb1.Name = "cmb_name"; // ОБЯЗАТЕЛЬНО дала ему имя
Rectangle rect1 = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); // Потом, создала прямоугольник( по его размерам будем определять размер нашего бокса), e.ColumnIndex e.RowIndex - индексы ячейки, думаю, знаешь что это :)
cmb1.Location = new Point(rect1.X, rect1.Y); // Указала боксу, куда ему лечь
cmb1.Size = new Size(rect1.Width, rect1.Height); // сказала ему, каких размеров он должен быть
dataGridView1.Controls.Add(cmb1); // добавила его на грид
cmb1.SelectedIndex = ((int)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value) - 1; // сказала ему, какой индекс должен быть выбран. Тут в пример указан случай, когда ты по внешнему ключу получаешь значения из другой таблицы
}
private void dgv_CellCancel(object sender, DataGridViewCellEventArgs e) // определила событие выхода из ячейки(Интер нажала, к примеру). Тут в бд записывать будем
{
string id = dataGridView1.Rows[e.RowIndex].Cells[0].Value + "";
string col = dt.Columns[e.ColumnIndex].ColumnName;
if (dataGridView1.Controls["name"] != null) // Если комбобокс создан, то
{
data = ((ComboBox)dataGridView1.Controls["name"]).Text; // спихиваем с него значение в переменную
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = data; /// Результат оставляешь в ячейке на гриде
}
sql = "Update " + currentTable + " set " + col + " = '" + data + "' where id = " + id + ";"; // формируешь запрос, где:
querry.writeToDataBase(sql);// записала в базу
}