我有一个datagridview,其数据源是一个数据表。 我正在为此datagridview添加一个复选框列。 我遇到的两个问题: 1.当用户点击该列中的任何单元格时,我首先需要获取该复选框的状态。 2.如果未选中状态,则会弹出一个消息框,询问用户是否要检查它。 这是YesNoCancel消息框。如果用户选择“是”或“否”,则复选框的状态应转为检查。对于取消,应将其保留为原始状态。 如果检查状态并且用户单击该复选框,则会弹出一个消息框,询问用户是否要取消选中它(YesNo),是,它应该将状态更改为未选中状态,然后选择“否”,将该复选框保留为原始状态
以下代码似乎不起作用:
if (e.RowIndex != -1)
{
DataGridViewRow dr = dataGridView1.CurrentRow;
DataGridViewCheckBoxCell chkCell = (DataGridViewCheckBoxCell)dr.Cells[0];
if (chkCell.Value == null)
{
DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?","Delete",MessageBoxButtons.YesNoCancel);
if (dResult == DialogResult.Yes)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.No)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.Cancel)
{
chkCell.Value = false;
}
}
//else if ((bool)chkCell.Value == true)
else if ((bool)chkCell.Value == true)
{
DialogResult dResult = MessageBox.Show("Do you want to unmark this value!","Delete",MessageBoxButtons.YesNo);
if (dResult==DialogResult.Yes)
{
chkCell.Value = false;
}
else
{
chkCell.Value = true;
}
}
else if ((bool)chkCell.Value == false)
{
DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNoCancel);
if (dResult == DialogResult.Yes)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.No)
{
chkCell.Value = false;
}
}
}
代码位于CellContentClick事件中。
答案 0 :(得分:1)
管理null案例的异常,我认为它更好。
然后我用一些附加内容重写了你的代码,即datagridview的EndEdit方法,在更改回以前的值之前提交原始行修改。
if (e.RowIndex != -1)
{
DataGridViewRow dr = dataGridView1.CurrentRow;
DataGridViewCheckBoxCell chkCell = (DataGridViewCheckBoxCell)dr.Cells[3];
try
{
if ((bool)chkCell.Value == true)
{
DialogResult dResult = MessageBox.Show("Do you want to unmark this value!", "Delete", MessageBoxButtons.YesNo);
if (dResult == DialogResult.Yes)
{
chkCell.Value = false;
}
else
{
dataGridView1.EndEdit();
chkCell.Value = true;
}
}
else if ((bool)chkCell.Value == false)
{
DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNo);
if (dResult == DialogResult.Yes)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.No)
{
dataGridView1.EndEdit();
chkCell.Value = false;
}
}
}
catch (Exception)
{
DialogResult dResult = MessageBox.Show("Do you want to mark this value for deletion?", "Delete", MessageBoxButtons.YesNoCancel);
if (dResult == DialogResult.Yes)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.No)
{
chkCell.Value = true;
}
else if (dResult == DialogResult.Cancel)
{
dataGridView1.EndEdit();
chkCell.Value = false;
}
}
}
dataGridView1.EndEdit();