我在dll中定义了删除方法,根据ID删除相应的记录,ID是自增的,数据库是access
下面的删除代码可以实现删除选中的单个行内容,但是全部选中时点击删除,只能删除所有选中的第一行,其他的都没删,请问怎么解决啊??谢谢!
protected void btnSelAll_Click(object sender, EventArgs e)//全部选中
    {
        foreach (GridViewRow row in GVDetails.Rows)
        {
            ((CheckBox)row.Cells[0].FindControl("chkSelect")).Checked = true;
        }     }
protected void btnDelSelect_Click(object sender, EventArgs e)//删除选中
    {
        for (int i = 0; i < GVDetails.Rows.Count; i++)//GVDetails是GridView
        {
            string ID = ((Label)GVDetails.Rows[i].FindControl("Label1")).Text;   
            if (((CheckBox)GVDetails.Rows[i].FindControl("chkSelect")).Checked)//chkSelect是模板页中的checkbox
            {
                oper.DeleteSelectDetails(ID);//删除记录的方法
                DetailsBind();
            }
         } 
     }    

解决方案 »

  1.   

          for (int i = 0; i < this.MyGridView2.Rows.Count; i++)
            {
                bool isChecked = ((CheckBox)MyGridView2.Rows[i].FindControl("CheckBox1")).Checked;
                if (isChecked)
                {
                    string ID = MyGridView2.DataKeys[MyGridView2.Rows[i].RowIndex].Value.ToString();
                    try
                    {
                        SqlCommand MyCommand;
                        MyCommand = new SqlCommand("SELECT Address FROM [biaozhun] WHERE ID=" + ID.Trim(), Con);
                        SqlDataReader Sdr = null;
                        //打开连接 
                        Con.Open();
                        Sdr = MyCommand.ExecuteReader();
                        if (Sdr.Read())
                        {
                            //获得要删除文件的物理地址
                            strFileAddress = Sdr["Address"].ToString().Trim();                    }
                        //关闭连接 
                        Con.Close();
                        try
                        {
                            //从数据库中删除记录
                            string cmdtxt = "DELETE FROM [biaozhun] WHERE [ID] = '" + ID.Trim() + "'";
                            SqlCommand Com = new SqlCommand(cmdtxt, Con);
                            Con.Open();
                            Com.ExecuteNonQuery();
                            Con.Close();
                            if (File.Exists(strFileAddress))
                            {
                                Label10.Visible = true;
                                Label10.Text = "文件正在删除中...";
                                //从硬盘上删除记录对应的文件
                                System.IO.FileInfo file = new System.IO.FileInfo(strFileAddress);
                                file.Delete();
                                Label10.Visible = false;
                            }
                            else
                            {
                                Label10.Visible = true;
                                Label10.Text = "该记录对应的文件不存在服务器上,删除操作失败!";
                            }
                        }
                        catch
                        {
                            Label10.Visible = true;
                            //提示文件删除失败!
                            Label10.Text = "文件删除操作失败!";
                        }
                    }
                    catch
                    {
                        this.Response.Write(("删除第" + i + "条记录时出错!"));
                    }
                }
      

  2.   

    access 数据库 没用过!关注!
      

  3.   

    我觉得你不要着急循环去删除,先循环把ID取出放到集合中,然后在去循环集合,根据集合中的ID去删除比如
    protected void btnDelSelect_Click(object sender, EventArgs e)//删除选中 
        { 
            arraylist list = new arraylist();
            for (int i = 0; i < GVDetails.Rows.Count; i++)//GVDetails是GridView 
            { 
                string ID = ((Label)GVDetails.Rows[i].FindControl("Label1")).Text;  
                list.items.add(id);
            } 
            
            for(int j=0;j<list.items.count;j++)
            {
                //删除的方法
            }
        }    
      

  4.   

    楼主,这个类似的问题我曾经回答过的。如果你需要我提供给你地址,你看了后觉得有帮助就把分给我,谢谢http://topic.csdn.net/u/20080928/17/b11260e0-65b1-40d7-b2b8-5607be1c9c3a.html在 17楼 得分:20
      

  5.   

    DetailsBind(); 你把这一名放到for循环的外面看看
      

  6.   

    楼主,这个类似的问题我曾经回答过的。如果你需要我提供给你地址,你看了后觉得有帮助就把分给我,谢谢http://topic.csdn.net/u/20080928/17/b11260e0-65b1-40d7-b2b8-5607be1c9c3a.html在 17楼 得分:20
      

  7.   

    DetailsBind(); 你把这一句放到for循环的外面看看
    不好意思打错了
      

  8.   

    我在dll中定义了删除方法,根据ID删除相应的记录,ID是自增的,数据库是access 
    下面的删除代码可以实现删除选中的单个行内容,但是全部选中时点击删除,只能删除所有选中的第一行,其他的都没删,请问怎么解决啊??谢谢! 
    protected void btnSelAll_Click(object sender, EventArgs e)//全部选中 
        { 
            foreach (GridViewRow row in GVDetails.Rows) 
            { 
                ((CheckBox)row.Cells[0].FindControl("chkSelect")).Checked = true; 
            }     } 
    protected void btnDelSelect_Click(object sender, EventArgs e)//删除选中 
        { 
            for (int i = 0; i < GVDetails.Rows.Count; i++)//GVDetails是GridView 
            { 
                string ID = ((Label)GVDetails.Rows[i].FindControl("Label1")).Text;  //一定要获取到相应的ID
                if (((CheckBox)GVDetails.Rows[i].FindControl("chkSelect")).Checked)//chkSelect是模板页中的checkbox 
                { 
                    DeleteRecord(ID); //删除方法              } 
            } 
        }    
    protected void DeleteRecord(string stringInput)
    {
      //执行删除的语句
    }