[英]How to enable Paging and Sorting on ASP.NET 4.0 GridView programmatically?
我使用ASP.NET 4.0與C#(Visual Web Developer 2010 Express)。
我已成功設法使用聲明性ASP.NET代碼實現綁定到存儲過程數據源的簡單GridView,如下所示:
<asp:GridView
ID="grdTrades"
runat="server"
DataKeyNames="tradeId"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
DataSourceID="sdsTrades"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sdsTrades" runat="server"
ConnectionString="<%$ ConnectionStrings:TradesDB %>"
ProviderName="<%$ ConnectionStrings:Trades.ProviderName %>"
SelectCommand="usp_GetTrades" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
它工作得很好,包括分頁和排序。 我想刪除SqlDataSource並使用代碼隱藏(我試圖將數據庫訪問代碼放在一個地方)。 到目前為止,我在我的代碼隱藏中有這個:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
grdTrades.SelectedIndex = 0;
DBUtil DB = new DBUtil();
grdTrades.DataSource = DB.GetTrades();
grdTrades.DataKeyNames = new string[] { "tradeId" };
grdTrades.DataBind();
}
}
// this is needed otherwise I get "The GridView 'grdTrades' fired event PageIndexChanging which wasn't handled."
void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
grdTrades.PageIndex = e.NewPageIndex;
grdTrades.DataBind();
}
我的聲明代碼現在看起來像:
<asp:GridView
ID="grdTrades"
runat="server"
EnablePersistedSelection="true"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="false"
OnPageIndexChanging="grdTrades_PageIndexChanging"
>
<Columns>
<asp:CommandField ShowSelectButton="true" ButtonType="Link" SelectText="Select" />
<asp:BoundField DataField="tradeId" HeaderText="TradeId" ReadOnly="True" SortExpression="tradeId" />
< ... more columns ... >
</Columns>
</asp:GridView>
問題是,當我點擊頁碼時,頁面變為空白。 我還想實現排序,但希望首先使分頁工作。 請幫忙。
謝謝
每次更改頁面時都需要綁定GridView。
例如:
void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
grdTrades.DataSource = DB.GetTrades();
grdTrades.PageIndex = e.NewPageIndex;
grdTrades.DataBind();
}
我的建議是將結果存儲在ViewState(或Cache DB.GetTrades()
中的DB.GetTrades()
中,這樣每次更改頁面時都不需要轉到數據庫。
但是,在執行此操作時,排序會變得非常困難。
您始終可以使用ObjectDataSource而不是SqlDatasource。 然后,您可以指向ObjectDataSource以查看DB.GetTrades()
函數。 排序和分頁將自動運行。
希望有所幫助。
您可以創建一種方法來綁定網格視圖,而不是在Paging中再次綁定它。 通過創建綁定網格視圖的方法,您始終可以調用方法以隨時綁定網格視圖。
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
BindgrdTrades();
}
private void BindgrdTrades()
{
DBUtil DB = new DBUtil();
grdTrades.DataSource = DB.GetTrades();
grdTrades.DataKeyNames = new string[] { "tradeId" };
grdTrades.DataBind();
}
}
void grdTrades_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
grdTrades.PageIndex = e.NewPageIndex;
BindgrdTrades();
}
}
我不得不將我的_PageIndexChanging計數器公開(我在asp.net上這么新,我不知道為什么這很重要)。 該頁面將通過一個錯誤說它無法找到該類。 這些帖子對於使用其他接近逐字邏輯的分頁工作有很大幫助。 感謝所有海報花時間如此清晰地展示出來。 這是我最終得到的代碼:
public partial class Requests : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
BindgrdBuilds();
}
}
private void BindgrdBuilds()
{
// Link GridView to datasource
GridView1.DataSource = BuildData.getBuilddata();
// Bind SQLDataSource to GridView after retrieving the records.
GridView1.DataBind();
}
public void GridView1_PageIndexChanging(Object sender, GridViewPageEventArgs e)
{
// increment PageIndex
GridView1.PageIndex = e.NewPageIndex;
// bind table again
BindgrdBuilds();
}
}
我堅持使用AutoGenerated列,並且我正在對我在上面沒有包含的cs頁面上的數據進行一些行綁定,但這里是我的GridView的asp代碼:
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="GridView1"
OnRowDataBound="GridView1_RowDataBound"
OnPageIndexChanging="GridView1_PageIndexChanging"
runat="server"
SelectedRowStyle-BackColor="Yellow"
AllowPaging="true"
AllowSorting="true"
PageSize = "20"
AutoGenerateColumns="true"
<-- table formatting code trimmed -->
</asp:GridView>
我希望其他人可以利用這些信息,這個帖子是一個很好的,簡單的例子。 現在,分頁工作正是時候才能獲得真正的想象力,並為GridView1:D找到一個新名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.