1.环境是winform vs20008
2.datagridview中有一列是checkbox类型的
3.我现在要去勾选某一行的checkbox这列,但是在勾选前我要做个判断能不能勾选,因为不满足条件是不可以勾的,现在的问题是,我到底在哪个事件中做这个判断。
4.请不要想当然的,一点要试验过后再回答,因为几个常见的我都已经试验过了。。都是在我勾选了之后才触发,这样是不行的

解决方案 »

  1.   

    这是我以前写得 主要是通过
    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();
                }        }
      

  2.   

    假设第3列为  CheckBox 列
    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dataGridView1.Rows[e.RowIndex].Cells[2];
                if (!cell.ReadOnly)
                {
                    cell.Selected = true;
                }
            }
      

  3.   

    http://topic.csdn.net/u/20090708/15/a340bdb4-e0ce-42e1-9e94-8b79daa9e49c.html?72864 我回复的可以参考。复选框放在  <ItemTemplate>里面
      

  4.   

    http://topic.csdn.net/u/20090705/23/885b4120-e1c1-407f-bcbe-7a4a054b760c.html这个地址。上面的地址错了