1.环境是winform vs20008
2.datagridview中有一列是checkbox类型的
3.我现在要去勾选某一行的checkbox这列,但是在勾选前我要做个判断能不能勾选,因为不满足条件是不可以勾的,现在的问题是,我到底在哪个事件中做这个判断。
4.请不要想当然的,一点要试验过后再回答,因为几个常见的我都已经试验过了。。都是在我勾选了之后才触发,这样是不行的
2.datagridview中有一列是checkbox类型的
3.我现在要去勾选某一行的checkbox这列,但是在勾选前我要做个判断能不能勾选,因为不满足条件是不可以勾的,现在的问题是,我到底在哪个事件中做这个判断。
4.请不要想当然的,一点要试验过后再回答,因为几个常见的我都已经试验过了。。都是在我勾选了之后才触发,这样是不行的
DataGridViewCheckBoxCell dgvCBC = (DataGridViewCheckBoxCell)DGV_IND_Param.CurrentCell;
来控制是否勾选 你看下下面的可能对你有帮助
private void DGV_IND_Param_CellClick(object sender, DataGridViewCellEventArgs e)
{
DGV_IND_Param.EndEdit(); if (e.RowIndex == -1)
{
return;
} if (e.ColumnIndex == -1)
{
return;
}
if (e.ColumnIndex == 0)
{
string s = DGV_IND_Param.Rows[e.RowIndex].Cells["IND_TAG_ID"].Value.ToString();
//this.dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString().Equals("True") //string s1 = DGV_IND_Param.Rows[e.RowIndex].Cells["IND_SELECT"].Value.ToString();
DataGridViewCheckBoxCell dgvCBC = (DataGridViewCheckBoxCell)DGV_IND_Param.CurrentCell;
int dsrow = e.RowIndex + pageSize * (pageCurrent - 1);//标记DS中选择项。 if (DGV_IND_Param.Rows[e.RowIndex].Cells["IND_SELECT"].EditedFormattedValue.ToString().Equals("False"))
{
if (DGV_IND_Param.Rows[e.RowIndex].Cells["IND_TAG_TYPE"].Value.ToString().Trim() == "开关量")
{
DataSet ds1 = dws.GET_Digital_Inf_by_TagID(s);
if (ds1.Tables.Count == 0)
{
MessageBox.Show("此开关量不可用,请重新选择! ", "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
dgvCBC.Value = false;
}
else
{
DataTable result = ds1.Tables[0];
if (result.Rows.Count == 0)
{
MessageBox.Show("此开关量不可用,请重新选择! ", "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
dgvCBC.Value = false;
//return;
}
else
{
if (result.Rows[0][0].ToString() != "")
{
//MessageBox.Show(this.sb.ToString());//.IndexOf(s).ToString()); if (CheckTAGID(s))
{
sb.Append(s + ",");
}
dgvCBC.Value = true;
}
else
{
MessageBox.Show("此开关量不可用,请重新选择! ", "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
dgvCBC.Value = false;
//return;
}
}
}
}
else
{
if (CheckTAGID(s))
{
sb.Append(s + ",");
}
dgvCBC.Value = true;
} }
else
{
dgvCBC.Value = false;
if (!CheckTAGID(s))
{
string[] strSB = null;
if (sb.Length > 0)
{
strSB = sb.ToString().Substring(0, sb.ToString().Length - 1).Split(',');
sb.Remove(0, sb.Length);
}
if (strSB != null)
{
for (int i = 0; i < strSB.Length; i++)
{
if (s != strSB[i].ToString())
{
sb.Append(strSB[i].ToString() + ",");
}
}
}
//sb.Remove(sb.ToString().IndexOf(s), s.Length + 1);
}
}
}
else if (e.ColumnIndex == 1)
{
string TagID = DGV_IND_Param.Rows[e.RowIndex].Cells["IND_TAG_ID"].Value.ToString();
Frm_Inf frmInf = new Frm_Inf(TagID);
frmInf.ShowDialog();
} }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dataGridView1.Rows[e.RowIndex].Cells[2];
if (!cell.ReadOnly)
{
cell.Selected = true;
}
}