源代码如下:
private void btn_DeleteUser_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定删除选中的数据吗?", "操作警示", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign) == DialogResult.Yes)
            {
                foreach (System.Windows.Forms.DataGridViewRow myrow in dgv_ShowAllUser.Rows)//DataRow  ADO.NET
                {
                    try
                    {
                        if ((bool)myrow.Cells["TempBit"].Value)
                        {
                            BLL_CLERK.frm_HUser.DeleteSelectUser(int.Parse(myrow.Cells["CLERK_ID"].Value.ToString()));
                            dgv_ShowAllUser.Rows.Remove(myrow);
                        }
                            
                    }
                    catch
                    {
                    }
                }            }

解决方案 »

  1.   

    问3个问题:1,假如你选中了其中的3行,你是怎么取这3行的值?能否拼在一起,如:string sDelIDs="'2','8','15'"; 2,delete动作能否放在一个 sql语句中?而不是放在for循环中delete?string sSQL="delte from tblTest where id in (" + sDelIDs + ")";3,执行delete完成之后,需要刷新页面吗?
      

  2.   

    回答(人在途中)< 谢谢你的留言  ^_^ >:首先说明:对于datagridview(之后简称dgv)中的每一列我在数据库中的具体表格中都有具体属性与之相系。而dgv中的选择项的相系属性是TempBit属性,它是bool类型,且默认值为0.1.假如我选中了其中的3行,那我取的值就是其实是值为真的TempBit值。能否拼在一起,这个我的设计想法是通过循环来完成。 ==,但显然存在未知问题!
    2.delete动作包括数据库中源数据的删除,也包括dgv中的数据显示删除。是第一种的话,使用界面都是通过与在数据库设计的存储过程接口来连接的的。delete是放在存储过程中的Sql语句。
    3.这个问题刚好是上个问题的另一种情况,执行delete后刷新页面的代码是上面的这句:
    dgv_ShowAllUser.Rows.Remove(myrow);
      

  3.   

    我是这样做的,参考首列加个checkbox,然后删除的时候循环一下
    for(int i=0;i<gridview.rows.count;i++)
    {
       checkbox checkbox=gridview.rows[i].findcontrol("checkbox名") as checkbox
       if(checkbox.checked)
      {
         //删除
      }
    }
      

  4.   

    弄一个checkbox 把值传一下。遍历删除!或者把选定的值传数组里再遍历删除
      

  5.   

    foreach循环不支持循环过程中改变集合,就是不能再遍历结束前改变所遍历的集合可以这样,将选定行的索引或者关键字存到一个list,然后遍历list通过索引或关键字删除数据库数据并移除dgv中的行
    具体写起来应该不难