我正在使用带有LinqDataSource的标准GridView。用户可以使用库存标准内容对网格进行排序和分页。搜索条件(WhereParameters)也可用于过滤结果。这很有效,但是当离开页面时,状态显然会丢失。
因此捕获Sort和Pagining状态以及WhereParameter值的通用机制会很棒。然后,可以将这些值添加到会话中,并在用户导航回页面时恢复它们。
非常感谢任何帮助。
我的代码如下:
<asp:GridView ID="dataGridView" runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
CssClass="GridView"
DataSourceID="linqDataSource"
PageSize="20">
<Columns>
<asp:BoundField
HeaderText="Name"
DataField="Name"
SortExpression="Name" />
<asp:TemplateField
HeaderText="Province"
SortExpression="Province.Name">
<ItemTemplate>
<%# Eval("Province.Name")%></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinqDataSource ID="linqDataSource" runat="server"
ContextTypeName="DataContext"
TableName="Schools"
EnableUpdate="True"
EnableDelete="True"
Where="Name.Contains(@Name) && (ProvinceID == @ProvinceID)">
<WhereParameters>
<asp:ControlParameter
Name="Name"
DefaultValue=""
ControlID="tbName"
Type="String"
ConvertEmptyStringToNull="False" />
<asp:ControlParameter
Name="ProvinceID"
DefaultValue=""
ControlID="ddlProvince"
Type="Int32" />
</WhereParameters>
</asp:LinqDataSource>
答案 0 :(得分:0)
嗯,丑陋的方式是使用会话并为其指定majic字符串或为其定义值
Session["_page"] = _currentPage;
Session["_sortColumn"] = _currentSortColumn;
Session["_sortDir"] = _currentSortDir;
或者你可能会变得棘手,并将其粘贴在用户个人资料中。然后在page_load或类似的东西上加载值。不利的一面是,如果有人离开,半小时后回来,他们又回到了他们最后的页面等。如果您正在寻找他们导航,比如详细表格,那么回来,只需将值传递到下一页。然后,您可以返回查询字符串上的值或类似的值。
享受。
答案 1 :(得分:0)
安迪,
您是否考虑过挂钩网格视图OnDataBound Event并将相应的gridview属性存储在Cookie中?然后,您可以在Non PostBack PageLoad事件上点击该cookie,将gridview恢复到用户离开它的大约*。
如果您希望页面长时间记住其状态,则可以使用cookie过期属性。
无论如何......这是一些示例代码。
protected void gvCountryList_DataBound(object sender, EventArgs e)
{
// Store gvCountryList Gridview Sort, PageIndex, and PageSize info
// in a cookie so that we can redisplay same grid position next
// time they visit page.
HttpCookie aCookie = new HttpCookie("MaintainCountries");
aCookie["SortExp"] = gvCountryList.SortExpression.ToString();
aCookie["SortDir"] = gvCountryList.SortDirection.ToString();
aCookie["PageIndex"] = gvCountryList.PageIndex.ToString();
Response.Cookies.Add("aCookie");
)
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
//Grab the cookies
if (Request.Cookies["MaintainCountries"] != null)
{
if ((Request.Cookies["MaintainCountries"]["SortExp"] != null)
&& (Request.Cookies["MaintainCountries"]["SortDir"] != null)
&& (Request.Cookies["MaintainCountries"]["PageIndex"] != null))
{
SortDirection srtDir = SortDirection.Ascending;
if (Request.Cookies["MaintainCountries"]["SortDir"].ToUpper() == "DESCENDING")
srtDir = SortDirection.Descending;
gvCountryList.Sort(Request.Cookies["MaintainCountries"]["SortExp"].ToString(), srtDir);
gvCountryList.PageIndex = Convert.ToInt32(Request.Cookies["MaintainCountries"]["PageIndex"].ToString());
}
}
}
}
也许有一种比cookie更好的方法。
我欢迎并批评和反馈社区。我认为自己是.net newb,所以如果有人发现潜在的问题或危险,请提出你的想法。
麦克