2013-05-06 74 views
2

所以我们说,我想创建页面,如“> 1 2 3 4 5 6 <”我决定使用分页模板在GridView的,这是我做的:如何在asp gridview中使用分页模板进行自定义分页?

aspx文件:

<asp:GridView ID="gvDept" runat="server" CellPadding="4" ForeColor="Black" 
         GridLines="Horizontal" AutoGenerateColumns="False" BackColor="White" 
         BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" 
         AllowSorting="True" AllowPaging="True" AllowCustomPaging="True" 
         DataSourceID="DS" DataKeyNames="departementcode" PageSize="3" OnRowCommand="gvDept_RowCommand"> 
         <Columns> 
          <asp:TemplateField> 
          <HeaderTemplate> 
           <asp:CheckBox runat="server" ID="cbSelectAll" onclick="SelectAll(this)"></asp:CheckBox> 
           <%-- <asp:CheckBox runat="server" ID="cbAll" OnCheckedChanged="cbAll_CheckedChanged" AutoPostBack="true"></asp:CheckBox>--%> 
          </HeaderTemplate> 
          <ItemTemplate> 
           <asp:CheckBox runat="server" ID="cbSelectOne"></asp:CheckBox> 
          </ItemTemplate> 
          </asp:TemplateField> 
          <asp:HyperLinkField text="Edit" DataNavigateUrlFields="departementcode" 
           DataNavigateUrlFormatString="ManageDepartement.aspx?flag=edit&amp;departementcode={0}" /> 
          <asp:TemplateField ShowHeader="False"> 
           <ItemTemplate> 
            <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" 
             OnClientClick="return confirm ('Are you sure?');" Text="Delete"> 
            </asp:LinkButton> 
           </ItemTemplate> 
           <ItemStyle ForeColor="Red" /> 
          </asp:TemplateField> 
          <asp:BoundField DataField="departementcode" HeaderText="Departement Code" ReadOnly="True" SortExpression="departementcode" /> 
          <asp:BoundField DataField="departementname" HeaderText="Departement Name" SortExpression="departementname" /> 
          <asp:BoundField DataField="createby" HeaderText="Create By" SortExpression="createby" /> 
          <asp:BoundField DataField="createdate" HeaderText="Create Date" SortExpression="createdate" /> 
          <asp:BoundField DataField="updateby" HeaderText="Update By" SortExpression="updateby" /> 
          <asp:BoundField DataField="lastupdate" HeaderText="Last Update" SortExpression="lastupdate" /> 
         </Columns> 
         <FooterStyle BackColor="#CCCC99" ForeColor="Black"/> 
         <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" /> 
         <PagerSettings Mode="Numeric" /> 
         <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Center" CssClass="paging"/> 
         <PagerTemplate> 

         </PagerTemplate> 
         <RowStyle BorderColor="White"/> 
         <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" /> 
         <SortedAscendingCellStyle BackColor="#F7F7F7" /> 
         <SortedAscendingHeaderStyle BackColor="#4B4B4B" /> 
         <SortedDescendingCellStyle BackColor="#E5E5E5" /> 
         <SortedDescendingHeaderStyle BackColor="#242121" /> 
        </asp:GridView> 
        <asp:LinqDataSource ID="DS" runat="server" ContextTypeName="Admin.AirAsiaDCDataContext" 
              EntityTypeName="" TableName="departements" EnableDelete="True" OnDeleted="DS_Deleted"> 
        </asp:LinqDataSource> 

然后我也把这个代码在C#:

protected void Page_Load(object sender, EventArgs e) 
     { 
       AirAsiaDCDataContext dc = new AirAsiaDCDataContext(); 
       int dtcount = dc.departements.Count(); 
       int pgcount = 0; 

       if (dtcount % 3 > 0) 
       { 
        pgcount = (dtcount/3) + 1; 
       } 
       else 
       { 
        pgcount = pgcount/3; 
       } 

       Button pagerBTN; 

       for (int i = 1; i <= pgcount; i++) 
       { 
        if(i == 1) 
        { 
         pagerBTN = new Button(); 
         pagerBTN.ID = "btNext"; 
         pagerBTN.Text = ">"; 
         pagerBTN.CommandName = "Next"; 

         gvDept.BottomPagerRow.Cells[0].Controls.Add(pagerBTN); 
        } 

        pagerBTN = new Button(); 
        pagerBTN.ID = "bt" + i; 
        pagerBTN.Text = i.ToString(); 
        pagerBTN.CommandName = i.ToString(); 

        gvDept.BottomPagerRow.Cells[0].Controls.Add(pagerBTN); 

        if (i == pgcount) 
        { 
         pagerBTN = new Button(); 
         pagerBTN.ID = "btLast"; 
         pagerBTN.Text = "<"; 
         pagerBTN.CommandName = "Last"; 

         gvDept.BottomPagerRow.Cells[0].Controls.Add(pagerBTN); 
        } 
       } 
     } 

    protected void gvDept_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      AirAsiaDCDataContext dc = new AirAsiaDCDataContext(); 
      int datacount = dc.departements.Count(); 
      int pagecount = 0; 
      int prevIDX = 0; 

      if (datacount % 3 > 0) 
      { 
       pagecount = (datacount/3) + 1; 
      } 
      else 
      { 
       pagecount = datacount/3; 
      } 

      if (e.CommandName == "Next") 
      { 
       if (gvDept.PageIndex < pagecount - 1) 
       { 
         prevIDX = gvDept.PageIndex; 
         gvDept.PageIndex = gvDept.PageIndex + 1; 

         if (prevIDX == pagecount - 2) 
         { 
          Button btn = (Button)gvDept.BottomPagerRow.Cells[0].FindControl("btNext"); 
          btn.Visible = false; 
         } 
       } 
      } 
      else if (e.CommandName == "Prev") 
      { 
       if (gvDept.PageIndex > 0) 
       { 
        prevIDX = gvDept.PageIndex; 
        gvDept.PageIndex = gvDept.PageIndex - 1; 

        if (prevIDX == 1) 
        { 
         Button btn = (Button)gvDept.BottomPagerRow.Cells[0].FindControl("btPrev"); 
         btn.Visible = false; 
        } 
       } 
      } 
      else 
      { 
       gvDept.PageIndex = Convert.ToInt32(e.CommandName) - 1; 
      } 
     } 

我的代码工作,但问题是,如果我点击这些分页按钮中的一个,回发后,我产生之前完全消失了我所有的呼叫按钮,我不明白我在这里做错了什么?任何更正?

+0

http://www.dotnetbull.com/2013/05/custom-paging-in-aspnet-using-stored.html此链接非常好地解释了自定义分页,它也解决了您的问题 – Vbp 2015-05-28 20:50:55

回答

0

在网格视图使用

OnPageIndexChanging="gvDept_PageIndexChanging" 

增加这个代码在cs文件的数据绑定到在每一页上的折射率变化网格视图。

protected void gvDept_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvDept.PageIndex = e.NewPageIndex; 
    // write here function to bind the grid to the datasource 
} 

在Page_Load函数的开头添加这个,以便数据在回发后每次绑定到网格视图。

if (!IsPostBack) 
    { 
     //function to bind the grid to data source 
    }