您的位置:首页 > 其它

2004-8-16+ 使用DataGird和DataSet进行批量删除

2006-06-29 18:18 465 查看
使用datagird和dataset联合作用批量删除数据。
在datagrid里添加一templatecolumn,将checkbox加到里面,运行时可以通过checkbox选择要删除的数据,最后按“全部删除”按钮即可将之全部删除。具体的示例可以看一些电子邮箱里的此种功能,比如163的就有。
其中的关键就在于怎么得到选择的数据,比如是一个id值。这里主要通过遍历datagrid里所有的checkbox,通过checkbox的checked属性来取选择的id值,得到后就可以通过dataset来完成最后的删除工作。
下面是代码部分。

delete_mul.aspx

<%@ Page language="c#" Codebehind="delete_mul.aspx.cs" AutoEventWireup="false" Inherits="startmssql.delete_mul" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>delete_mul</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="showData" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox ID="toCheck" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="uid" HeaderText="编号"></asp:BoundColumn>
<asp:BoundColumn DataField="username" HeaderText="用户名"></asp:BoundColumn>
<asp:BoundColumn DataField="role" HeaderText="角色"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
<asp:LinkButton id="showSelected" runat="server"> check!</asp:LinkButton>
<asp:LinkButton id="deleteMul" runat="server">delete!</asp:LinkButton>
</form>
</body>
</HTML>

delete_mul.aspx.cs

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.SqlClient;
using System.Configuration;

namespace startmssql
{
/// <summary>
/// delete_mul 的摘要说明。
/// </summary>
public class delete_mul : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton showSelected;
protected System.Web.UI.WebControls.LinkButton deleteMul;
protected System.Web.UI.WebControls.DataGrid showData;
private SqlConnection conn;
private SqlCommand cmd;
private SqlDataAdapter ada;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack)
setUp();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.showSelected.Click += new System.EventHandler(this.showSelected_Click);
this.deleteMul.Click += new System.EventHandler(this.deleteMul_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

//得到datareader数据源
private SqlDataReader getDataReader()
{
string strconn=ConfigurationSettings.AppSettings[0];
conn=new SqlConnection(strconn);
string sql="select * from users";
cmd=new SqlCommand(sql,conn);
try
{
conn.Open();
SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sdr;
}
catch(SqlException ex)
{
Trace.Warn(ex.Message);
return null;
}
}

//得到dataset数据源
private DataSet getDataSet()
{
string strconn=ConfigurationSettings.AppSettings[0];
string sql="select * from users";
ada=new SqlDataAdapter(sql,strconn);
DataSet ds=new DataSet();
try
{
ada.Fill(ds);
return ds;
}
catch(SqlException ex)
{
Trace.Warn(ex.Message);
return null;
}
}

//给删除按钮添加一个确认弹出窗口
private void addAlert()
{
deleteMul.Attributes.Add("onclick","return confirm('really delete them all?')");
}

//初始化
private void setUp()
{
addAlert();
using(SqlDataReader sdr=getDataReader())
{
showData.DataSource=sdr;
showData.DataBind();
}
}

//得到选择的id
private ArrayList getChecked()
{
ArrayList saveIdChecked=new ArrayList();
CheckBox isChecked;
//遍历每一行
foreach(DataGridItem dataItem in showData.Items)
{
//获取checkbox
isChecked=(CheckBox)dataItem.FindControl("toCheck");
//把选择的id添加到arraylist
if(isChecked.Checked==true)
{
string idChecked=dataItem.Cells[1].Text;
saveIdChecked.Add(idChecked);
}
}
return saveIdChecked;
}

//显示选择的数据
private void showSelected_Click(object sender, System.EventArgs e)
{
ArrayList idChecked=getChecked();
for(int i=0;i<idChecked.Count;i++)
{
Trace.Warn((string)idChecked[i]);
}
}

//批量删除
private void deleteMul_Click(object sender, System.EventArgs e)
{
ArrayList toDelete=getChecked();
using(ada)
{
DataSet ds=getDataSet();
DataTable dt=ds.Tables[0];
//设定主键,因为在向dataset填充数据时,会扔掉一些数据库的信息,其中就包括主键,所以需要在这里手动设置
dt.PrimaryKey=new DataColumn[]{dt.Columns[0]};
SqlCommandBuilder cb=new SqlCommandBuilder(ada);
for(int i=0;i<toDelete.Count;i++)
{
//找到需要删除的行
DataRow dr=dt.Rows.Find(toDelete[i]);
dr.Delete();
}
//最后更新
ada.Update(ds);
}
//别忘了重新绑定数据
setUp();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: