foreach(DataGridItem dgi in DataGrid1.Items)
{
  CheckBox cb=(CheckBox)(dgi.Cells[0].Controls[1]);
  if (cb.Checked==true)
  {
    int i=dgi.ItemIndex;//i为对应datagrid的row的索引号
    //int License=(int)DataGrid1.DataKeys[i];
  }
}

解决方案 »

  1. 不知道说得对不对:最笨的方法,可以设一个数组变量,将每次选到的单格数据以一定的关系放进去。然后用某个触发事件将其写进另一个表中。如果数据非常多的话,也可以用一个临时的datatable存放起来。请指正。
      

  2. 谢楼上二位。方法正确,但是就是实现不了。
    问题有2:
        1. 选中若干数据后,点击按钮,接着刷新页面,结果相当于没选中;
        2. 如果数据很多,datagrid需要分页,选完第一页后,翻到第二页,
           结果第一页丢失。
    还望各位帮帮忙,想想其他办法。
      

  3. 1、应该没这种问题吧,你是在本页提交的吧。
    2、实在不行可以用一个临时的TABLE来保存数据
      

  4. 以下是我的应用,和你的差不多,只不过是删除该行。希望对你有所帮助public void delete_Click(Object o,ImageClickEventArgs e)
    {
    for(int i=0;i<dgrResult.Items.Count;i++)
    {
    CheckBox Select=(CheckBox)dgrResult.Items[i].FindControl("delete");
    if (Select.Checked==true)
    {
    String strID = dgrResult.Items[i].Cells[1].Text.ToString();
    String strDelete = "Delete from instore where id="+strID;OleDbCommand objCommand = new OleDbCommand(strDelete,objConnect);
    try 
    {
    if(objConnect.State.ToString() != "Open") // 连接是否打开
    objConnect.Open();
    objCommand.ExecuteNonQuery();
    }
    catch(Exception objError) 
    {
    Response.Write(objError.Message);
    } Response.Write(dgrResult.Items[i].Cells[1].Text.ToString());

    }
    BindDataGrid();
    }
      

  5. 1、试试将绑定DataGrid放在
      if(!Page.IsPostback)
      {
        //绑定DataGrid
      }
    2、用了上面的方法后看看是否还丢失?
      

  6. 点击按钮的刷新问题可以通过判断ispostback来解决。
    实现的思路可以这样,设一个datakey,然后通过datakey得到纪录的id,通过这个id就可以得到这条记录的任意字段值了,这样不就能随意插入别的表了吗,如果选中多个只需要一个循环就行了
      

类似问题 »