У меня есть 2 datagridview в WinForms dgv1 dgv2 dgv1 имеет несколько столбцов, включая 1 CheckBoxColumn, dgv2 имеет несколько столбцов, но не CheckBoxColumn. Я хочу функциональность, которая позволяет мне, когда я проверяю CheckBoxColumn, данные этого конкретного Строка должны быть выбраны и перейти в Dgv2. так я помещаю выбранные строки из dgv1 в dgv2. Но если я отменил чек (или разблокировать), проверил checkBox в dgv1, что определенную строку следует удалить из dgv2. Помогите мне это исправить. Я буду благодарен вам, ребята, с нетерпением жду этого. :)
вот мой код, рассмотрим datagridview6 = dgv1 и datagridview10 = dgv2
private void dataGridView6_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView10.Visible = true;
if (dataGridView6.CurrentCell.ColumnIndex == 7)
{
if (dataGridView6.CurrentCell.Value != null)
{
bool checkstate = (bool)dataGridView6.CurrentCell.Value;
if (checkstate == false)
{
dataGridView6.CurrentCell.Value = true;
}
else
{//here help in logic to delete unchecked row
dataGridView6.CurrentCell.Value = false;
int j= int.Parse(dataGridView6.Rows[e.RowIndex].ToString());
dataGridView10.Rows.Remove(dataGridView10.Rows[j]);
}
}
else
{dataGridView6.CurrentCell.Value = true;
dataGridView10.Rows.Insert(i); dataGridView10.Rows[i].Cells[1].Value=dataGridView6.CurrentRow.Cells[2].Value.ToString();
dataGridView10.Rows[i].Cells[2].Value = dataGridView6.CurrentRow.Cells[3].Value.ToString();
dataGridView10.Rows[i].Cells[3].Value = dataGridView6.CurrentRow.Cells[5].Value.ToString();
}
}
/* в этой логической проверке строка выбирается в dgv2, но при снятии флажка удаление не работает.
обе сетки данных не связаны с базой данных, m выбирает значение с использованием класса SQlCommand.
Для этого вам нужно сохранить RowIndex
из dgv2
в dgv2
Проверено Row Tag
.
например, когда вы выбираете любую строку из dgv1
вы добавляете эти записи в dgv2
dgv2. Теперь вам нужно сохранить этот новый индекс строки созданной строки в dgv1.CurrentRow
.
Таким образом, когда ячейка не установлена, вы можете найти добавленную строку из dgv2
, используя этот индекс строки.
///Inserting default records
///The fifth column value is a primary key value
///Application will check that value with second grid and performs remove and add rows
///we cannot use row index to remove row. because the row index will be changed if any row removed from dgv2.
///I have placed this code in form load event.
dgv1.Rows.Add(false, "Nimesh", "Gujarat", "India", 1);
dgv1.Rows.Add(false, "Prakash", "MP", "India", 2);
dgv1.Rows.Add(false, "Rohit", "Maharashtra", "India", 3);
dgv1.Rows.Add(false, "Jasbeer", "Panjab", "India", 4);
dgv1.Rows.Add(false, "Venkteshwar", "Karnatak", "India", 5);
dgv1.Rows.Add(false, "Rony", "Delhi", "India", 6);
///We cannot use CellChange event becauase it will be executed after cell end edit.
///We cannot use CellContentClick event coz it will not call when you double click or clicking quickly multiple times.
///So we are using CellMouseUp event
private void dgv1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (dgv1.CurrentCell == null)
return;
dgv2.Visible = true;
if (dgv1.CurrentCell.ColumnIndex == 0)
{
bool bValue = (bool)dgv1.CurrentCell.GetEditedFormattedValue(e.RowIndex, DataGridViewDataErrorContexts.CurrentCellChange);
if (bValue)
{
for (int iRow = 0; iRow < dgv2.Rows.Count; iRow++)
{
if (dgv2.Rows[iRow].Tag != null && dgv2.Rows[iRow].Tag.Equals(dgv1.CurrentRow.Cells[4].Value))
return;
}
int iNewRowIndex = dgv2.Rows.Add();
dgv2.Rows[iNewRowIndex].Cells[0].Value = dgv1.CurrentRow.Cells[1].Value;
dgv2.Rows[iNewRowIndex].Cells[1].Value = dgv1.CurrentRow.Cells[2].Value;
dgv2.Rows[iNewRowIndex].Cells[2].Value = dgv1.CurrentRow.Cells[3].Value;
dgv2.Rows[iNewRowIndex].Tag = dgv1.CurrentRow.Cells[4].Value;
}
else
{
if (dgv1.CurrentRow.Cells[4].Value != null)
{
for (int iRow = 0; iRow < dgv2.Rows.Count; iRow++)
{
if (dgv2.Rows[iRow].Tag != null && dgv2.Rows[iRow].Tag.Equals(dgv1.CurrentRow.Cells[4].Value))
{
dgv2.Rows.RemoveAt(iRow);
break;
}
}
}
}
}
}
Добавьте скрытые столбцы в обоих DataGridView. Когда пользователь проверяет checkboxcolumn, присвойте уникальное значение скрытому столбцу. Скопируйте все ячейки строки из первого DataGridView во второй. Когда пользователь снимет флажок, просто найдите строку по значению скрытого столбца. RemoveAt()
строка.