C# 分页asp.net/c时Gridview中复选框值的持久性#
我想在网格视图中显示的项目选择上保留复选框值 这是gridviewpage.aspx中创建gridview的代码:C# 分页asp.net/c时Gridview中复选框值的持久性#,c#,asp.net,gridview,C#,Asp.net,Gridview,我想在网格视图中显示的项目选择上保留复选框值 这是gridviewpage.aspx中创建gridview的代码: <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "False" Font-Names = "Arial" Font-Size = "
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns = "False" Font-Names = "Arial"
Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B"
HeaderStyle-BackColor = "green" AllowPaging ="True"
OnPageIndexChanging = "OnPaging1xxx" OnRowDataBound = "RowDataBound"
AllowSorting="True" DataKeyNames="CustomerID" DataSourceID="SqlDataSource1" >
<Columns>
<asp:BoundField ItemStyle-Width = "150px" DataField = "CustomerID"
HeaderText = "CustomerID" ReadOnly="True" SortExpression="CustomerID" />
<asp:BoundField ItemStyle-Width = "150px" DataField = "City" HeaderText = "City"
SortExpression="City"/>
<asp:BoundField ItemStyle-Width = "150px" DataField = "Country"
HeaderText = "Country" SortExpression="Country"/>
<asp:BoundField ItemStyle-Width = "150px" DataField = "PostalCode"
HeaderText = "PostalCode" SortExpression="PostalCode"/>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server" onclick="Check_Click(this)"/>
</ItemTemplate>
<HeaderTemplate>
<asp:CheckBox id="chkAll" runat="server" Text="Select All" onclick="checkAll(this)"/>
</HeaderTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="#C2D69B" />
<HeaderStyle BackColor="Green"></HeaderStyle>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="Data Source=SDANTURTHI-PC;Initial Catalog=ArticleDB;Integrated Security=True"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [CustomerID], [City], [Country], [PostalCode] FROM [Customers]">
</asp:SqlDataSource>
</div>
这是gridviewpage.aspx.cs中的代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;
using System.IO.Compression;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList CheckBoxArray;
if (ViewState["CheckBoxArray"] != null)
{
CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
}
else
{
CheckBoxArray = new ArrayList();
}
if (IsPostBack)
{
int CheckBoxIndex;
bool CheckAllWasChecked=false;
CheckBox chkAll = (CheckBox)GridView1.HeaderRow.Cells[4].FindControl("chkAll");
string checkAllIndex = "chkAll-" + GridView1.PageIndex;
if (chkAll.Checked)
{
if (CheckBoxArray.IndexOf(checkAllIndex) == -1)
{
CheckBoxArray.Add(checkAllIndex);
}
}
else
{
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBoxArray.Remove(checkAllIndex);
CheckAllWasChecked = true;
}
}
for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[4].FindControl("CheckBox1");
CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1);
if (chk.Checked)
{
if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1 && !CheckAllWasChecked)
{
CheckBoxArray.Add(CheckBoxIndex);
}
}
else
{
if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1 || CheckAllWasChecked)
{
CheckBoxArray.Remove(CheckBoxIndex);
}
}
}
}
}
ViewState["CheckBoxArray"] = CheckBoxArray;
GridView1.DataBind();
}
protected void OnPaging1xxx(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
if (ViewState["CheckBoxArray"] != null)
{
ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
string checkAllIndex = "chkAll-" + GridView1.PageIndex;
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBox chkAll = (CheckBox)GridView1.HeaderRow.Cells[4].FindControl("chkAll");
chkAll.Checked = true;
}
for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[4].FindControl("CheckBox1");
chk.Checked = true;
GridView1.Rows[i].Attributes.Add("style","background-color:aqua");
}
else
{
int CheckBoxIndex = GridView1.PageSize * (GridView1.PageIndex) + (i + 1);
if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1)
{
CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[4].FindControl("CheckBox1");
chk.Checked = true;
GridView1.Rows[i].Attributes.Add("style", "background-color:aqua");
}
}
}
}
}
}
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover", "MouseEvents(this, event)");
e.Row.Attributes.Add("onmouseout", "MouseEvents(this, event)");
}
}
}
使用系统;
使用系统数据;
使用系统配置;
使用System.Web;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.Web.UI.WebControl.WebParts;
使用System.Web.UI.HTMLControl;
使用System.Data.SqlClient;
使用系统集合;
使用系统IO压缩;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
ArrayList CheckBoxArray;
如果(ViewState[“CheckBoxArray”]!=null)
{
CheckBoxArray=(ArrayList)视图状态[“CheckBoxArray”];
}
其他的
{
CheckBoxArray=newArrayList();
}
如果(iPostBack)
{
int-CheckBoxIndex;
bool CheckAllWasChecked=false;
复选框chkAll=(复选框)GridView1.HeaderRow.Cells[4]。FindControl(“chkAll”);
字符串checkAllIndex=“chkAll-”+GridView1.PageIndex;
如果(已勾选)
{
if(CheckBoxArray.IndexOf(checkAllIndex)=-1)
{
添加(checkAllIndex);
}
}
其他的
{
if(CheckBoxArray.IndexOf(checkAllIndex)!=-1)
{
CheckBoxArray.Remove(checkAllIndex);
CheckAllWasChecked=true;
}
}
对于(int i=0;i
它无法持久化这些值,但当我调试checkboxarray和
viewstate[“checkboxarray”]
时,它们似乎拥有正确的值。我不明白为什么它不起作用。请帮帮我。感谢您的期待请注意,ViewState仅在从服务器到浏览器的过程中“起作用”。你不能指望它还在邮筒背面
持久化它需要使用会话
编辑
任何要返回服务器的内容都需要将其放入表单中->它将在请求中。表单[“blabla”]
或者在查询字符串中(mypage.aspx?blabla=somevalue)
->它将在请求中。QueryString[“blabla”] 这是将数据从服务器获取到页面的唯一两种方法 (增编: 当您的控件触发您在代码隐藏cs文件中处理的事件时,这会对您稍微隐藏。ASP.NET将控件包装在表单中