none
datagridview控件中包含checkbox列的问题 RRS feed

  • 问题

  • 在winForm中,用datagridview控件,现在要加一个类似于checkbox的列,它里面有一个DataGridViewCheckBoxColumn,我添加了,也在网上找了一些,但是为什么我这里一直不可以选择,
    我用下面这样的来设置默认值,但是没有效果
                foreach (DataGridViewRow row in this.dataGridView1.Rows)
                {
                    //row.Cells[0].value = true;
                }
    还有一个问题就是,现在如果要获取选中了几行,这个事件要怎么写,在网上看用dCellContentClick事件
    我现在要做的功能是把选中的行主键取出来,然后去数据库里面查,把数据显示在另外一个datagridview上,
    i当取消选中的时候,就把相应的数据从datagridview上移除掉
    我现在是用一个list<T>来放选中的数据,然后用List.Add
    和List.Remove来添加和移除数据,


    crazyBasketball
    2009年12月16日 5:32

答案

  • 关于你的第一个问题。我试了,可以的
    你是不是把DataGridViewCheckBoxColumn列的readonly设为了true;

     string str = "server=.;database=TQ_SysManage;uid=sa;pwd=1234";
            private void button3_Click(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection(str);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from sys_userinfo",con);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adp.Fill(ds);
                this.dataGridView1.DataSource=ds.Tables[0];

                //for (int i = 0; i < dataGridView1.Rows.Count; i++)
                //{
                //    this.dataGridView1.Rows[i].Cells[0].Value = true;
                //}
                foreach (DataGridViewRow row in this.dataGridView1.Rows)
                {
                    row.Cells[0].Value = true;
                }

               
            }


    努力+方法=成功
    • 已标记为答案 YiChun Chen 2009年12月17日 10:25
    2009年12月16日 5:49
  • 关于你的第二个问题,你可以在
    单击CHEKCBOX时,如果chckbox处于选中状态就向list添加
    如果chekbox处于未选中状态,就从list移除

    List<string>  lt=new List<string>();
         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    //第一列为checkbox
                if(e.ColumnIndex==0)
                {
                     if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString() == "True")
                     {
                            lt.Add(this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
                     }
                        else
                     {
                         lt.Remove(this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
                     }
                }             
            }


    努力+方法=成功
    • 已标记为答案 YiChun Chen 2009年12月17日 10:25
    2009年12月16日 6:11

全部回复

  • 关于你的第一个问题。我试了,可以的
    你是不是把DataGridViewCheckBoxColumn列的readonly设为了true;

     string str = "server=.;database=TQ_SysManage;uid=sa;pwd=1234";
            private void button3_Click(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection(str);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from sys_userinfo",con);
                SqlDataAdapter adp = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adp.Fill(ds);
                this.dataGridView1.DataSource=ds.Tables[0];

                //for (int i = 0; i < dataGridView1.Rows.Count; i++)
                //{
                //    this.dataGridView1.Rows[i].Cells[0].Value = true;
                //}
                foreach (DataGridViewRow row in this.dataGridView1.Rows)
                {
                    row.Cells[0].Value = true;
                }

               
            }


    努力+方法=成功
    • 已标记为答案 YiChun Chen 2009年12月17日 10:25
    2009年12月16日 5:49
  • 关于你的第二个问题,你可以在
    单击CHEKCBOX时,如果chckbox处于选中状态就向list添加
    如果chekbox处于未选中状态,就从list移除

    List<string>  lt=new List<string>();
         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    //第一列为checkbox
                if(e.ColumnIndex==0)
                {
                     if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString() == "True")
                     {
                            lt.Add(this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
                     }
                        else
                     {
                         lt.Remove(this.dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString());
                     }
                }             
            }


    努力+方法=成功
    • 已标记为答案 YiChun Chen 2009年12月17日 10:25
    2009年12月16日 6:11
  • 谢谢,我试试
    crazyBasketball
    2009年12月16日 7:18