删除多条时会有问题,可能是这一行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();
}
}
}
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();
}
}
}
在网上看到一些批量删除数据的例子.但是大部分是用的数组来保存所选的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");
} }
}
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(); // 返回删除的行数的总数