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

使用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();
   }
}

posted on 2006-06-29 18:18  Notus|南色的风  阅读(683)  评论(5编辑  收藏  举报