Alex Rivera | Logout

How to enable Paging and Sorting on ASP.NET 4.0 GridView programmatically?

Asked 2010-11-03T08:57:25.180
21

I am using ASP.NET 4.0 with C# (Visual Web Developer 2010 Express).

I have successfully managed to implement a simple GridView bound to a stored procedure data source using declarative ASP.NET code as shown here:

<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>

It works great including paging and sorting. I want to remove the SqlDataSource and use code-behind (I'm trying to put database access code in one place). So far I have this in my code-behind:

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();
}    

My declarative code

Edit
Report

1 Answer

3

You can create a method to for binding the grid view instead of Binding it again in Paging. By creating a method that binds the Grid View you can always call the method to Bind the grid view whenever you want.

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(); 
   } 
}
answered 2013-02-18T09:23:50.023

Your Answer