是否有可能启用在代码隐藏中绑定的GridView的分页/排序?
本文关键字:GridView 分页 排序 绑定 启用 有可能 代码 隐藏 是否 | 更新日期: 2023-09-27 18:07:19
我知道GridView可以处理排序和分页,如果我将它绑定到一个ObjectDataSource,只需要在SelectMethod中获得项目列表。因为显然所有的ODS正在做的是获得项目,我试图将GridView直接绑定到项目集合。
我试着:
[aspx]<asp:Button runat="server" OnClick="ItemsSearch" Text="Search" />
<asp:GridView runat="server" ID="ItemsGV"
AllowPaging="true" AllowSorting="true" PageSize="4" />
(后台代码)protected void ItemsSearch(object sender, EventArgs e)
{
DataSet Items = new DataSet();
Items.ReadXml(MapPath("Items.xml"));
Session["items"] = Items;
ItemsGV.DataSource = Session["items"];
ItemsGV.DataBind();
}
GridView加载了数据,但如果我点击排序或更改页面,什么都不会发生。
你知道如何使这种绑定工作吗?
当人们点击这些按钮时,你必须添加事件处理程序。
想象一下:当你第一次加载页面时,你想要的所有数据都进入GridView。ASP。NET意识到您只能在第一页上显示X项,因此它将其加载到控件中并将其发送到客户端。现在,用户想要查看第2页的项目。当他们发出这个请求时,它到达服务器,但是服务器已经丢失了对第2页的所有引用。它不知道该显示什么。
你需要处理事件并告诉它显示什么。这将意味着重新绑定到数据并显示第2页的信息。
在学习了一些教程后,我最终得到了这个解决方案:
(default . aspx)<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TemplateGridViewNoDataSourcePagingSorting.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:Button ID="Button1" runat="server" OnClick="ItemsSearch" Text="Search" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView runat="server" ID="ItemsGV" Visible="false"
AllowPaging="true" AllowSorting="true" PageSize="4"
OnPageIndexChanging="ItemsGV_PageIndexChanging" OnSorting="ItemsGV_Sorting">
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
[Default.aspx.cs] using System;
using System.Data;
using System.Threading;
using System.Web.UI.WebControls;
namespace TemplateGridViewNoDataSourcePagingSorting
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Thread.Sleep(3000); // simulate long response time
var ItemsDataSet = new DataSet();
ItemsDataSet.ReadXml(MapPath("Items.xml"));
Session["items"] = ItemsDataSet.Tables[0];
ViewState["sortingOrder"] = string.Empty;
}
}
protected void ItemsGV_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
ItemsGV.PageIndex = e.NewPageIndex;
ItemsGV.DataSource = Session["items"];
ItemsGV.DataBind();
}
protected void ItemsSearch(object sender, EventArgs e)
{
ItemsGV.Visible = true;
DataBindGrid("", "");
}
private void DataBindGrid(string sortExpr, string sortOrder)
{
// if sorting expression had changed
// set sort order to ascending
if (sortExpr != (string)ViewState["sortingExpression"])
{
sortOrder = "asc";
ViewState["sortingOrder"] = "asc";
}
ViewState["sortingExpression"] = sortExpr;
var dt = Session["items"] as DataTable;
if (dt != null)
{
DataView dv = dt.DefaultView;
if (sortExpr != string.Empty)
dv.Sort = sortExpr + " " + sortOrder;
ItemsGV.DataSource = dv;
ItemsGV.DataBind();
}
else
{
ItemsGV.DataSource = null;
ItemsGV.DataBind();
}
}
protected void ItemsGV_Sorting(object sender, GridViewSortEventArgs e)
{
DataBindGrid(e.SortExpression, sortingOrder);
}
public string sortingOrder
{
get
{
if (ViewState["sortingOrder"].ToString() == "desc")
ViewState["sortingOrder"] = "asc";
else
ViewState["sortingOrder"] = "desc";
return ViewState["sortingOrder"].ToString();
}
set
{
ViewState["sortingOrder"] = value;
}
}
}
}
[Items.xml] <?xml version="1.0" encoding="utf-8" ?>
<Items>
<Item>
<ItemName>Item01</ItemName>
<ItemDescription>Item01 Description</ItemDescription>
<ItemPrice>2.50</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
<Item>
<ItemName>Item02</ItemName>
<ItemDescription>Item02 Description</ItemDescription>
<ItemPrice>1.50</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
<Item>
<ItemName>Item03</ItemName>
<ItemDescription>Item03 Description</ItemDescription>
<ItemPrice>3.50</ItemPrice>
<ItemInStock>N</ItemInStock>
</Item>
<Item>
<ItemName>Item04</ItemName>
<ItemDescription>Item04 Description</ItemDescription>
<ItemPrice>5.00</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
<Item>
<ItemName>Item05</ItemName>
<ItemDescription>Item05 Description</ItemDescription>
<ItemPrice>5.50</ItemPrice>
<ItemInStock>N</ItemInStock>
</Item>
<Item>
<ItemName>Item06</ItemName>
<ItemDescription>Item06 Description</ItemDescription>
<ItemPrice>4.50</ItemPrice>
<ItemInStock>N</ItemInStock>
</Item>
<Item>
<ItemName>Item07</ItemName>
<ItemDescription>Item07 Description</ItemDescription>
<ItemPrice>1.50</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
<Item>
<ItemName>Item08</ItemName>
<ItemDescription>Item08 Description</ItemDescription>
<ItemPrice>7.50</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
<Item>
<ItemName>Item09</ItemName>
<ItemDescription>Item09 Description</ItemDescription>
<ItemPrice>0.50</ItemPrice>
<ItemInStock>N</ItemInStock>
</Item>
<Item>
<ItemName>Item10</ItemName>
<ItemDescription>Item10 Description</ItemDescription>
<ItemPrice>3.50</ItemPrice>
<ItemInStock>Y</ItemInStock>
</Item>
</Items>