删除多条时会有问题,可能是这一行myBind.RemoveAt(int.Parse(t));出问题了。但是如果用ds.Tables[0].Rows[t].Delete();则出现排序问题。请大家帮忙解决。是否有更好的方法。谢谢!
public void Delete()
{
string DelID = "";
string ID = "";
for(int i=0;i<myBind.Count;i++)
{
  if(dataGrid1.IsSelected(i)) 
  {
     ID +=i+",";
  }
}
if(ID != "") 
{
   ID = ID.Substring(0,ID.Length-1);
   string[] tmp = ID.Split(new char[] {','});
   if (MessageBox.Show ("确定要删除这些数据吗?", "删除数据", MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes) 
   {  
      OleDbDataAdapter catDA = new OleDbDataAdapter();
      catDA.DeleteCommand = new OleDbCommand("delete * from customer where id = @id ",con);
      catDA.DeleteCommand.CommandType = CommandType.Text;
      catDA.DeleteCommand.Parameters.Add("@id",OleDbType.Integer,0,"id");
      con.Open();
      
      foreach(string t in tmp)
      {
myBind.RemoveAt(int.Parse(t));
         //ds.Tables[0].Rows[t].Delete();  //当为排序就会有问题
      }
      catDA.Update(ds,"customer");
      con.Close();
   }
}
}

解决方案 »

  1.   

    给楼住一个web的
    在网上看到一些批量删除数据的例子.但是大部分是用的数组来保存所选的id.这样比较麻烦,也不容易被理解.我就拿个比较简单的方法来实现这个功能.(而且还加个删除提示窗口)using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.OleDb;
    namespace overred.test
    {
     /// 
     /// t1 的摘要说明。
     /// 
     public class t1 : System.Web.UI.Page
     {
      protected System.Web.UI.WebControls.Label message;
      protected System.Web.UI.WebControls.LinkButton showck;
      protected System.Web.UI.WebControls.CheckBox CheckBox1;
      protected System.Web.UI.WebControls.LinkButton delall;
      protected System.Web.UI.WebControls.DataGrid dg;
      private OleDbCommand cmd;
      private OleDbConnection conn;
      protected System.Web.UI.WebControls.LinkButton lb;
      private string  datas;
     
     
      private void Page_Load(object sender, System.EventArgs e)
      {   
                
       
       Session["s"]="dd";
       // 在此处放置用户代码以初始化页面
       if(!this.Page.IsPostBack)
       Sql();
       
       
          
      }   private DataSet Getds()
      {
                    datas="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../overred.mdb");
           conn = new OleDbConnection(datas);
        conn.Open();
        OleDbDataAdapter adp = new OleDbDataAdapter("select * from subnews order by news_order desc", conn);
        DataSet ds = new DataSet();          
        adp.Fill(ds,"link"); 
          
        return ds; 
        
       
               
      
      
      }
      private void Sql()
       {  
       alter();
       using (DataSet dss=Getds())
         
       this.dg.DataSource=dss;
       this.dg.DataBind();
      
      }
      private void alter()//添加确认窗口
      {
      this.delall.Attributes.Add("onclick","return confirm('确定删除')");
      
      }    #region Web 窗体设计器生成的代码
      override protected void OnInit(EventArgs e)
      {
       //
       // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
       //
       InitializeComponent();
       base.OnInit(e);
      }
      
      /// 
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改
      /// 此方法的内容。
      /// 
      private void InitializeComponent()
      {    
       this.showck.Click += new System.EventHandler(this.showck_Click);
       this.delall.Click += new System.EventHandler(this.delall_Click);
       this.lb.Click += new System.EventHandler(this.lb_Click);
       this.Load += new System.EventHandler(this.Page_Load);  }
      #endregion  private void showck_Click(object sender, System.EventArgs e)//显示选择的项
      {      //ArrayList saveIdChecked=new ArrayList();
       CheckBox isChecked;
       //遍历每一行
       foreach(DataGridItem dataItem in dg.Items)
       {
        //获取checkbox
        isChecked=(CheckBox)dataItem.FindControl("ck");
        //把选择的id添加到arraylist
        if(isChecked.Checked==true)
        {
         string idChecked=dataItem.Cells[1].Text;
         //saveIdChecked.Add(idChecked);
         Response.Write(idChecked);
         Response.Write(isChecked.Checked);
        }
       }
       
       
      }  private void delall_Click(object sender, System.EventArgs e)
      {   
       alter();
                datas= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../overred.mdb");
       conn = new OleDbConnection(datas);
       cmd=new OleDbCommand();
       cmd.Connection=conn;
       conn.Open();
       CheckBox isChecked;
       //遍历每一行
       foreach(DataGridItem dataItem in dg.Items)
       {
        //获取checkbox
        isChecked=(CheckBox)dataItem.FindControl("ck");
           
        if(isChecked.Checked==true)//如果选中则执行删除命令
         {
         cmd.CommandText="Delete from subnews where news_id="+dataItem.Cells[1].Text.ToString();
         cmd.ExecuteNonQuery(); 
         }
       }
       Sql();//重新绑定
       //Response.Redirect("t1.aspx");
      } }
    }
      

  2.   

    试一试我的吧.比较短的代码,但很好用.
    OleDbConnection theConnection = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=..\\..\\mydata.mdb"); theConnection.Open();// 删除操作
    String strDel = "DELETE FROM table WHERE ...";
    OleDbCommand cmmdDelPort = new OleDbCommand(strDel, theConnection);
    int n = cmmdDelPort.ExecuteNonQuery();    // 返回删除的行数的总数
      

  3.   

    我觉得你最好用一个循环把要删除的行标记为deleted(用delete()),然后在update更新即可
      

  4.   

    后台代码出来,但是Asp.net代码没出来呀。前台代码呢??难道要别人去凑呀???