我在WinForms中有2个datagridview dgv1 dgv2 dgv1有一些列,包括1个CheckBoxColumn,dgv2有一些列但没有CheckBoxColumn。 我想要的功能使我,当我检查CheckBoxColumn时,应选择该特定行的数据并进入Dgv2。 这是我如何将选定的行从dgv1放到dgv2。 但是如果我取消check(或unckeck),检查dgv1中的checkBox应该从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中选择了此逻辑检查行中的/ *,但在取消选中时,删除操作无效。
两个数据网格都不与数据库绑定,使用SQlCommand类获取值。
答案 0 :(得分:1)
要执行此操作,您需要将RowIndex
dgv2
存储在Checked Row的Tag
属性中。
例如,当您从dgv1
选择任何行时,您要在dgv2
gridview中添加该记录。现在,您需要将创建的行的新行索引存储在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;
}
}
}
}
}
}
答案 1 :(得分:0)
在两个DataGridView上添加隐藏列。
当用户选中checkboxcolumn为隐藏列分配一些唯一值时。
将行的所有单元格从第一个DataGridView复制到第二个。
当用户取消选中该复选框时,只需按隐藏列的值查找该行。
RemoveAt()
行。