我是这样加入的checkbox:  
            DataTable dt = new DataTable();
            dt = Ds.Tables[0];            DataColumn dtcCheck = new DataColumn("选择");
            dtcCheck.DataType = System.Type.GetType("System.Boolean");
            dtcCheck.DefaultValue = false;            dt.Columns.Add(dtcCheck);             dataGrid1.DataSource = dt;问题1:如何判断checkbox的值为true or false?
问题2: 根据什么删除显示在datagrid中的数据库的数据?
问题3:datagrid中那一个属性是不可以编辑在显示的时候datagrid中的值?

解决方案 »

  1.   

    to 问题3:datagrid中那一个属性是不可以编辑在显示的时候datagrid中的值?设置DataGrid的ReadOnly属性
      

  2.   

    to 问题2: 根据什么删除显示在datagrid中的数据库的数据?参看
    http://blog.csdn.net/knight94/archive/2006/03/17/627556.aspx
      

  3.   

    to 如何判断checkbox的值为true or false?if((bool)yourdataGrid[yourViewRow, checkcolumnindex]) 
         MessageBox.Show("I am true"); 
    else 
         MessageBox.Show("I am false");
     
      

  4.   

    首先dt.AcceptChanges()一下。
    1:如何判断checkbox的值为true or false?
    只要判断Convert.ToBolean(dt.Rows[i]["选择"])
    2: 根据什么删除显示在datagrid中的数据库的数据?
    dt.Remove(row)  -- row 为要删除的行。
    3:datagrid中那一个属性是不可以编辑在显示的时候datagrid中的值?
    设置ReadOnly.
      

  5.   

    yourViewRow这是什么啊?怎么用这个属性啊?能给一个例子吗?
      

  6.   

    上面的朋友都已经回答了,呵呵!
    取得当前选中行的数据:
    DataRowView dv = (DataRowView)dataGrid.BindingContext[dataSet,dataSet.Tables[0].TableName].Current
    DataRow row = dv.Row;
    然后就可以根据row[ColumnIndex]或者row[ColumnName]取得当前列的数据了。
    不过要做删除的话,还是要在DataTable里面操作。
      

  7.   

    问题1:如何判断checkbox的值为true or false?
    ===============================
    bool a = Convert.ToBoolean(dataGrid1[i,j]);//i为选择行,j为checkbox所在的列。问题2: 根据什么删除显示在datagrid中的数据库的数据?
    ===============================
    2种方法,1种是用DataAdapt来自动删除,但数据源中必须包括主键,1种是直接构造SQL语句。
    一般都是根据主键来删除,或者能唯一标识该行数据的值也可以。
    其实最终目的都是构造SQL(Delete)语句问题3:datagrid中那一个属性是不可以编辑在显示的时候datagrid中的值?
    ===============================
    this.DataGrid1.ReadOnly = true;
      

  8.   

    我现在通过这句(dataGrid2[dataGrid2.CurrentRowIndex, 2].ToString());只能得到当前选定行的记录中的数据,这样可以产生SQL语句!但每次只能选取一行。我想实现如何在datagrid 中checkbox中选取的行的删除!
      

  9.   

    (1)可以通過反射來實現.
    (2)通過ID來刪除,也可以通過SQL語句實現
    (3)READONLY=TRUE
      

  10.   

    你只要取出checkBox绑定的那列的值进行判断是否为true或false.
    删除对应的DataRow就行。
    如果DataGrid绑定的是DataView,
    DataRowView drv = (DataRowView)this.BindingContext[this.ds,this.ds.Tables[0].TableName].Current;
    获取到drv就可以改数据,
    DataRow dw = drv.Row; // 得到DataRow,
      

  11.   

    我现在通过下面这句只能得到当前选定行的记录中的数据,这样可以产这生SQL语句!但每次只能选取一行。我想实现如何在datagrid 中checkbox中选取的行的删除!
    (dataGrid2[dataGrid2.CurrentRowIndex, 2].ToString());
    ====================================
    那就遍历datagrid的所有行,把所有要删除数据的主键找出来,生产如下的SQL语句在数据库中删除:Delete 表名 where 主键列 in (你选出来的主键)
      

  12.   

    楼上正解,你把选中的当前行的主键放在一个arraylist里面,最后合成一个SQL语句到数据库执行删除操作,不用每次都选中一行都去构建一次SQL语句。不过如果你要删除的行比较多的话最好不要用IN(主键1,主键2...)这样的操作,一则这样效率不高,二则in里面的参数有个数限制。你可以换用OR操作。
    综合起来也就是通过上面说的DataRowView取得当前行,然后取得对应的主键列的值,然后ADD到一个arraylist,然后组织SQL语句时循环这个arraylist里面的主键值。也就是组合成一个语句来执行。
      

  13.   

    这是我遍历行的代码,但现在出错的提示为,列选择不属于表table
                    for (i = 0; i < dataGrid2.VisibleRowCount - 1; i++)
                    {
                        
                        bool a = Convert.ToBoolean(dt.Rows[i]["选择"]);
                        
                        if (a == true)
                        {
                            DataRowView drv = (DataRowView)this.BindingContext[ds2.Tables[0]].Current;
                                                    
                        }
                        else
                        {
                         MessageBox.Show("没有记录被选中!");
                        }   
                    }
      

  14.   

    你的字段名不是“选择”吧?如果你用tablestyle设置了中文字段名,那也只是显示时为中文,你看看数据库里面的字段是什么?确认那一列就是中文字段吗?
      

  15.   

    在我的数据库里面没有选择这个字段,是我在后来又重新加的只在显示datagrid时才出现的的
      

  16.   

    如果在DataTable里面没有这个字段肯定会出错了!
    即便你是临时加的你也先把这个字段加到datatable里面去,只是在插入数据库的时候你就别管这个字段了,你只需要在界面上控制就可以
      

  17.   

    <asp:datalist id="dl_mana_posi" runat="server"  DataKeyField="count_id" Width="570px" BackColor="ControlLight">private void bt_delete_Click(object sender, System.EventArgs e) 
    {
    for (int i=1;i<dl_mana_posi.Items.Count;i++)
    { bool CbxTable=((CheckBox)dl_mana_posi.Items[i].FindControl("ck_choice")).Checked;

    if(CbxTable==true) 

    if(lb_id.Text=="") 
    {  
    //获取单元格中的内容 
    lb_id.Text=(dl_mana_posi.DataKeys[i].ToString()); 
    }  
    else  

    lb_id.Text=lb_id.Text+ "," +dl_mana_posi.DataKeys[i].ToString();  
    }

    }
    else
    {
     lb_id.Text="111";
    }
    }
                
    wzcClass.wzcData.Open();  
    SqlCommand cmdshell=new SqlCommand("delete from IRC_publ_posi where count_id in('"+lb_id.Text+"')",wzcClass.wzcData.MyConn);
    cmdshell.ExecuteNonQuery();
    wzcClass.wzcData.Close();
    //dl_mana_posi.DataBind();('"+lb_id.Text+"')
    wzcClass.wzcScript.Show("删除成功!");
    Label1.Text=lb_id.Text.ToString();

    }lb_id.Text为找到count_id号。
      

  18.   

    private void DeleteImageButton_Click(object sender, system.Web.UI.ImageClickEventArgs e)
      {
         for (int i = 0; i< this.DataGrid.Items.Count; i++)
         {
    CheckBox ch = new CheckBox();
    ch = (CheckBox)DataGrid.Items[i].Cells[0].Controls[1];
    if (ch.Checked == true)
    {
       //删除操作程序                          
             }

         }

         BindData();
      }