实现点击DataGrid题头CheckBox全选或全不选及在翻页后保持CheckBox状态

代码说明:1.加入题头CheckBox,实现点击题头CheckBox实现全选或全不选
     2.在翻页时保存原来页的CheckBox的状态
  1Province.aspx
  2
  3<%@ Page language="c#" Codebehind="Province.aspx.cs" AutoEventWireup="false" Inherits="Province.WebForm1" %>
  4<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  5<HTML>
  6    <HEAD>
  7        <title>Province</title>
  8        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  9        <meta content="C#" name="CODE_LANGUAGE">
 10        <meta content="JavaScript" name="vs_defaultClientScript">
 11        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
 12        <script language="javascript">
 13        // 函数功能:全选或全不选
 14        function isSelect(checkboxValue, checkboxIdValue) 
 15        {
 16            var form = document.forms[0];
 17            for (i = 0; i < form.length; i++{
 18                if (checkboxIdValue.indexOf ('CheckAll'!= -1
 19                {
 20                    if(checkboxValue == true
 21                    {
 22                        form.elements[i].checked = true;
 23                    }
 
 24                    else 
 25                    {
 26                        form.elements[i].checked = false;
 27                    }

 28                }
 
 29                else if (checkboxIdValue.indexOf ('DeleteThis'!= -1
 30                {
 31                     if(form.elements[i].checked == false
 32                     {
 33                         form.elements[1].checked = false;
 34                     }
                          
 35                }

 36            }

 37        }

 38        
 39        // 函数功能:确认删除
 40        function confirmDelete(form) 
 41        
 42            for (i = 0; i < form.length; i++
 43            {
 44                if (form.elements[i].name.indexOf('DeleteThis'!= -1
 45                {
 46                    if(form.elements[i].checked
 47                    {
 48                        return confirm('确认要删除吗?');
 49                    }

 50                }

 51            }

 52        }

 53        </script>
 54    </HEAD>
 55    <body MS_POSITIONING="GridLayout">
 56        <form id="Form1" method="post" runat="server">
 57            <FONT face="宋体">
 58                <asp:datagrid id="MyDataGrid" style="Z-INDEX: 101; LEFT: 192px; POSITION: absolute; TOP: 80px"
 59                    runat="server" DataKeyField="PROVINCE_ID" CellSpacing="2" ForeColor="Black" PageSize="5" AllowPaging="True"
 60                    AutoGenerateColumns="False" Width="384px" CellPadding="4" BackColor="#CCCCCC" BorderWidth="3px"
 61                    BorderStyle="Solid" BorderColor="#999999">
 62                    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#000099"></SelectedItemStyle>
 63                    <ItemStyle HorizontalAlign="Center" BackColor="White"></ItemStyle>
 64                    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="White" BackColor="Black"></HeaderStyle>
 65                    <FooterStyle BackColor="#CCCCCC"></FooterStyle>
 66                    <Columns>
 67                        <asp:TemplateColumn>
 68                            <HeaderTemplate>
 69                                <INPUT id="CheckAll" type="checkbox" runat="server" onclick="javascript:return isSelect(this.checked, this.id);">
 70                            </HeaderTemplate>
 71                            <ItemTemplate>
 72                                <INPUT id="DeleteThis" type="checkbox" runat="server" onclick="javascript:return isSelect(this.checked, this.id);">
 73                            </ItemTemplate>
 74                        </asp:TemplateColumn>
 75                        <asp:BoundColumn DataField="Province_id" HeaderText="省份编号"></asp:BoundColumn>
 76                        <asp:BoundColumn DataField="Province_name" HeaderText="省份名称"></asp:BoundColumn>
 77                    </Columns>
 78                    <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#CCCCCC" Mode="NumericPages"></PagerStyle>
 79                </asp:datagrid>
 80                <asp:Button id="btnDelete" style="Z-INDEX: 102; LEFT: 344px; POSITION: absolute; TOP: 336px"
 81                    runat="server" Text="删除"></asp:Button></FONT></form>
 82    </body>
 83</HTML>
 84
 85Province.aspx.cs
 86
 87using System;
 88using System.Collections;
 89using System.ComponentModel;
 90using System.Data;
 91using System.Data.OracleClient;
 92using System.Drawing;
 93using System.Web;
 94using System.Web.SessionState;
 95using System.Web.UI;
 96using System.Web.UI.WebControls;
 97using System.Web.UI.HtmlControls;
 98
 99namespace Province
100{
101    /// <summary>
102    /// WebForm1 的摘要说明。
103    /// </summary>

104    public class WebForm1 : System.Web.UI.Page
105    {
106        protected System.Web.UI.WebControls.DataGrid MyDataGrid;
107        protected System.Web.UI.HtmlControls.HtmlInputCheckBox CheckBox;
108        
109        // 成员变量
110        public string deletedIds;
111        public string ChkdItems;
112        public string ChkBxIndex;
113        public bool BxChkd = false;
114        public string[] results;
115        ArrayList CheckedItems;
116        protected System.Web.UI.WebControls.Button btnDelete;
117        
118        // 声明连接变量
119        OracleConnection MyConn;
120    
121        private void Page_Load(object sender, System.EventArgs e)
122        {
123            // 在此处放置用户代码以初始化页面
124            string connString = "user id=pxmis;password=pxmis;data source=pxmis;persist security info=False";
125            MyConn = new OracleConnection(connString);
126            MyConn.Open();
127            if (!Page.IsPostBack)
128            {
129                this.ViewState.Clear();
130                BindData();
131            }

132        }

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

143        
144        /// <summary>
145        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
146        /// 此方法的内容。
147        /// </summary>

148        private void InitializeComponent()
149        {    
150            this.MyDataGrid.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.MyDataGrid_Page);
151            this.btnDelete.Click += new System.EventHandler(this.DeleteSelect);
152            this.Load += new System.EventHandler(this.Page_Load);
153
154        }

155        #endregion

156
157        // 数据绑定
158        public void BindData()
159        {
160            string strSQL = "select * from Province";
161            OracleDataAdapter MyDataAdapter = new OracleDataAdapter(strSQL, MyConn);
162            DataSet MyDataSet = new DataSet();
163            MyDataAdapter.Fill(MyDataSet,"Province");
164            MyDataGrid.DataSource = MyDataSet.Tables[0].DefaultView;
165            MyDataGrid.DataBind();
166        }

167        
168        public void GetCheckBoxValues()
169        {
170            CheckedItems = new ArrayList();
171
172            foreach (DataGridItem dgItem in MyDataGrid.Items)
173            {
174                ChkBxIndex = MyDataGrid.DataKeys[dgItem.ItemIndex].ToString();
175                CheckBox = (HtmlInputCheckBox)dgItem.FindControl("DeleteThis");
176
177                if (this.ViewState["CheckedItems"!= null)
178                {
179                    CheckedItems = (ArrayList)this.ViewState["CheckedItems"];
180                }

181
182                if (CheckBox.Checked == true)
183                {
184                    BxChkd = true;
185                    
186                    if (!CheckedItems.Contains(ChkBxIndex))
187                    {
188                        CheckedItems.Add(ChkBxIndex.ToString());
189                    }

190                }

191                else
192                {
193                    CheckedItems.Remove(ChkBxIndex.ToString());
194                }

195            }

196            this.ViewState["CheckedItems"= CheckedItems;
197        }

198
199        public void RePopulateCheckBoxes()
200        {
201            CheckedItems = new ArrayList();
202            CheckedItems = (ArrayList)this.ViewState["CheckedItems"];
203
204            if (CheckedItems != null)
205            {
206                foreach(DataGridItem dgItem in MyDataGrid.Items)
207                {
208                    ChkBxIndex = MyDataGrid.DataKeys[dgItem.ItemIndex].ToString();
209
210                    if(CheckedItems.Contains(ChkBxIndex) == true)
211                    {
212                        CheckBox = (HtmlInputCheckBox)dgItem.FindControl("DeleteThis");
213                        CheckBox.Checked = true;
214                    }

215                    
216                    results = (string[])CheckedItems.ToArray(typeof(string));
217                    deletedIds = string.Join(",", results);
218                }

219            }

220        }

221
222        private void MyDataGrid_Page(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
223        {
224            this.GetCheckBoxValues();
225            MyDataGrid.CurrentPageIndex = e.NewPageIndex;
226            BindData();
227            this.RePopulateCheckBoxes();
228        }

229
230        private void DeleteSelect(object sender, System.EventArgs e)
231        {
232            this.GetCheckBoxValues();
233
234            if (BxChkd == true)
235            {
236                this.RePopulateCheckBoxes();
237                string strDelSQL = "delete from Province where Province_id in ("+deletedIds+")";
238                OracleCommand MyCommand = new OracleCommand(strDelSQL, MyConn);
239                MyCommand.ExecuteNonQuery();
240                MyConn.Close();
241                this.ViewState.Clear();
242                MyDataGrid.CurrentPageIndex = 0;
243                BindData();
244            }

245
246            // 确认删除
247            this.btnDelete.Attributes.Add("onclick""javascript:return confirmDelete(this.form);");
248        }

249    }

250}


posted @ 2006-04-25 19:27  torome  阅读(1033)  评论(1)    收藏  举报