战神白起
一战成名

实现的效果:类似于网易邮箱删除邮件的功能。
思路:

使用datagird和dataset联合作用批量删除数据。
在datagrid里添加一templatecolumn,将checkbox加到里面,运行时可以通过checkbox选择要删除的数据,最后按“全部删除”按钮即可将之全部删除。其中的关键就在于怎么得到选择的数据,比如是一个id值。这里主要通过遍历datagrid里所有的checkbox,通过checkbox的checked属性来取选择的id值,得到后就可以通过dataset来完成最后的删除工作。
下面是代码部分。
 1<%@ Page language="c#" Codebehind="WebForm4.aspx.cs" AutoEventWireup="false" Inherits="startmssql.delete_mul" %>
 2<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
 3<HTML>
 4    <HEAD>
 5        <title>WebForm4</title>
 6        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
 7        <meta name="CODE_LANGUAGE" Content="C#">
 8        <meta name="vs_defaultClientScript" content="JavaScript">
 9        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
10    </HEAD>
11    <body MS_POSITIONING="GridLayout">
12        <form id="WebForm4" method="post" runat="server">
13            <asp:DataGrid id="showData" runat="server" AutoGenerateColumns="False" PageSize="5" AllowPaging="True" AllowCustomPaging="True">
14                <Columns>
15                    <asp:TemplateColumn>
16                        <ItemTemplate>
17                            <asp:CheckBox ID="toCheck" Runat="server"></asp:CheckBox>
18                        </ItemTemplate>
19                    </asp:TemplateColumn>
20                    <asp:BoundColumn DataField="userID" HeaderText="编号"></asp:BoundColumn>
21                    <asp:BoundColumn DataField="username" HeaderText="用户名"></asp:BoundColumn>
22                    <asp:BoundColumn DataField="provinceID" HeaderText="proviceID"></asp:BoundColumn>
23                    <asp:BoundColumn DataField="cityID" HeaderText="cityID"></asp:BoundColumn>
24                    <asp:BoundColumn DataField="areaID" HeaderText="areaID"></asp:BoundColumn>
25                    <asp:BoundColumn DataField="enabled" HeaderText="enableD"></asp:BoundColumn>
26                </Columns>
27                <PagerStyle Mode="NumericPages"></PagerStyle>
28            </asp:DataGrid>
29            <asp:LinkButton id="showSelected" runat="server" style="Z-INDEX: 101; LEFT: 110px; POSITION: absolute; TOP: 174px"> 检查!</asp:LinkButton>
30            <asp:LinkButton id="deleteMul" runat="server" style="Z-INDEX: 102; LEFT: 186px; POSITION: absolute; TOP: 174px">删除!</asp:LinkButton>
31        </form>
32    </body>
33</HTML>
34

C#源程:
  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Web;
  7using System.Web.SessionState;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
 10using System.Web.UI.HtmlControls; 
 11using System.Data.SqlClient;
 12using System.Configuration;
 13 
 14namespace startmssql
 15{
 16    /// 
 17    /// delete_mul 的摘要说明。
 18    ///使用datagird和dataset联合作用批量删除数据。
 19    ///在datagrid里添加一templatecolumn,将checkbox加到里面,运行时可以通过checkbox选择要删除的数据,最后按“全部删除”按钮即可将之全部删除。具体的示例可以看一些电子邮箱里的此种功能,比如163的就有。
 20    ///其中的关键就在于怎么得到选择的数据,比如是一个id值。这里主要通过遍历datagrid里所有的checkbox,通过checkbox的checked属性来取选择的id值,得到后就可以通过dataset来完成最后的删除工作。
 21
 22    /// 

 23    public class delete_mul : System.Web.UI.Page
 24    {
 25        protected System.Web.UI.WebControls.LinkButton showSelected;   
 26        protected System.Web.UI.WebControls.LinkButton deleteMul;
 27        protected System.Web.UI.WebControls.DataGrid showData;
 28        private SqlConnection conn;
 29        private SqlCommand cmd;
 30        private SqlDataAdapter ada;
 31    
 32 
 33        private void Page_Load(object sender, System.EventArgs e)
 34        {
 35            // 在此处放置用户代码以初始化页面
 36            if(!this.IsPostBack)
 37                setUp();
 38        }

 39 
 40    Web 窗体设计器生成的代码
 62 
 63        //得到datareader数据源
 64        private SqlDataReader getDataReader()
 65        {
 66            
 67            
 68            string strconn=ConfigurationSettings.AppSettings["ConnectionString"];
 69            conn=new SqlConnection(strconn);
 70            string sql="select * from testgrid";
 71            cmd=new SqlCommand(sql,conn);
 72            try
 73            {
 74                conn.Open();
 75                SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
 76                return sdr;
 77            }

 78            catch(SqlException ex)
 79            {
 80                Trace.Warn(ex.Message);
 81                return null;
 82            }

 83        }

 84 
 85        //得到dataset数据源
 86        private DataSet getDataSet()
 87        {
 88            string strconn=ConfigurationSettings.AppSettings["ConnectionString"];
 89            string sql="select * from testgrid";
 90            ada=new SqlDataAdapter(sql,strconn);
 91            DataSet ds=new DataSet();
 92            try
 93            {
 94                ada.Fill(ds);
 95                return ds;
 96            }

 97            catch(SqlException ex)
 98            {
 99                Trace.Warn(ex.Message);
100                return null;
101            }

102        }

103 
104        //给删除按钮添加一个确认弹出窗口
105        private void addAlert()
106        {
107            deleteMul.Attributes.Add("onclick","return confirm('确定删除这些数据记录?')");
108        }

109 
110        //初始化
111        private void setUp()
112        {
113            addAlert();
114            using(SqlDataReader sdr=getDataReader())
115            {
116                showData.DataSource=sdr;
117                showData.DataBind();
118            }

119        }

120 
121        //得到选择的id
122        private ArrayList getChecked()
123        {
124            ArrayList saveIdChecked=new ArrayList();
125            CheckBox isChecked;
126            //遍历每一行
127            foreach(DataGridItem dataItem in showData.Items)
128            {
129                //获取checkbox
130                isChecked=(CheckBox)dataItem.FindControl("toCheck");
131                //把选择的id添加到arraylist
132                if(isChecked.Checked==true)
133                {
134                    string idChecked=dataItem.Cells[1].Text;
135                    saveIdChecked.Add(idChecked);
136                }

137            }

138            return saveIdChecked;
139        }

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

149        }

150 
151        //批量删除
152        private void deleteMul_Click(object sender, System.EventArgs e)
153        {
154            ArrayList toDelete=getChecked();
155            using(ada)
156            {
157                DataSet ds=getDataSet();
158                DataTable dt=ds.Tables[0];
159                //设定主键,因为在向dataset填充数据时,会扔掉一些数据库的信息,其中就包括主键,所以需要在这里手动设置
160                dt.PrimaryKey=new DataColumn[]{dt.Columns[0]};
161                SqlCommandBuilder cb=new SqlCommandBuilder(ada);
162                for(int i=0;i<toDelete.Count;i++)
163                {
164                    //找到需要删除的行
165                    DataRow dr=dt.Rows.Find(toDelete[i]);
166                    dr.Delete();
167                }

168                //最后更新
169                ada.Update(ds);
170            }

171            //别忘了重新绑定数据
172            setUp();
173        }

174    }

175}

176
posted on 2006-03-10 09:23  战神白起  阅读(2723)  评论(3)    收藏  举报