2009-12-19 27 views
0

我已經成功實現了我的GridView,但是一如既往,整個ASP.NET生命週期事情都在困擾着我。我無法弄清楚爲什麼這不起作用。我已綁定GridView的OnPageIndexChanged這樣:ASP.NET GridView,在分頁後啓用/禁用按鈕

protected void GridView_PageIndexChanged(object sender, EventArgs e) 
{ 
    // Enable/disable the previous/next buttons. 
    LinkButton btnNextPage = (LinkButton)gvTable.BottomPagerRow.FindControl("btnNextPage"); 
    LinkButton btnPreviousPage = (LinkButton)gvTable.BottomPagerRow.FindControl("btnPreviousPage"); 
    btnNextPage.Enabled = false; 
    btnPreviousPage.Enabled = false; 
} 

這是我的ASCX:

<asp:GridView ID="gvTable" runat="server" ShowHeader="true" PageSize="1" 
    AllowPaging="true" AllowSorting="true" DataSourceID="dsLinqActivities" 
    AutoGenerateColumns="false" OnRowDataBound="GridView_DataBound" 
    OnPageIndexChanged="GridView_PageIndexChanged"> 
    <Columns> 
    <asp:BoundField DataField="Edited" HeaderText="Date" /> 
    <asp:BoundField DataField="Status" HeaderText="Status" /> 
    <asp:BoundField DataField="Activity" /> 
    </Columns> 
    <PagerSettings Position="Bottom" Visible="true" /> 
    <PagerStyle CssClass="pager" /> 
    <PagerTemplate> 
    <asp:LinkButton ID="btnPreviousPage" class="navbtn prev left" 
     runat="server" CommandName="Page" CommandArgument="Prev"> 
     <span>Newer activities</span></asp:LinkButton> 
    <asp:LinkButton ID="btnNextPage" class="navbtn next right" 
     runat="server" CommandName="Page" CommandArgument="Next"> 
     <span>Older activities</span></asp:LinkButton> 
    </PagerTemplate> 
</asp:GridView> 

調試我的應用程序,看到代碼正在運行並做正確的事,但由於某種原因,當該控件已呈現,兩個按鈕始終處於啓用狀態。我在這裏做錯了什麼?

回答

2

如果我是你,我就喜歡這樣的「GridView_PageIndexChanged」方法的代碼它

(gvTable.BottomPagerRow.FindControl("btnNextPage") as LinkButton).Enabled = true/false; 

編輯:你也可以嘗試加入二傳手?

set 
{ 
gvTable.BottomPagerRow.FindControl("btnNextPage") as LinkButton =value; 
} 

編輯:好吧,我的朋友,我終於找出了一個解決方案。可能不是很優雅,但它的工作原理和我測試它。有幾件事需要注意: 1.我們正在使用「Prev」和「Next」按鈕,因爲我們正在使用我們自己的尋呼機模板,所以我們必須處理「OnCommand」事件。2.我們會必須在處理我們的OnCommand事件後綁定數據。

我有一個靜態的List<String>,我在隨機字符串(禮貌:http://www.kivela.be/index.php/2007/06/19/how-to-generate-a-random-string-in-c-20/)填充GET並將它們綁定到我的網格。您可以在這裏替換您自己的數據源。另外,我們必須在OnCommand事件中手動更改網格的頁面索引。

這裏是我的aspx/ascx的電網

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView_DataBound" 
    AllowPaging="true" PagerSettings-Mode="NextPrevious" PagerSettings-Position="Bottom" PageSize="10" 
    OnPageIndexChanged="GridView_PageIndexChanged"> 
    <PagerSettings Position="Bottom" Visible="true" /> 
    <PagerStyle CssClass="pager" /> 
    <PagerTemplate> 
     <asp:LinkButton ID="btnPreviousPage" OnCommand="ChangePage" 
     runat="server" CommandName="Prev" Text="prev"> 
     </asp:LinkButton> 
     <asp:LinkButton ID="btnNextPage" OnCommand="ChangePage" 
     runat="server" CommandName="Next" Text="next"> 
     </asp:LinkButton> 
    </PagerTemplate> 

    </asp:GridView> 

,這裏是代碼隱藏

public partial class TestPage : System.Web.UI.Page 
{ 
    private static Random _random = new Random(); 
    static List<string> lst = new List<string>(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 


     if (!Page.IsPostBack) 
     { 
      for (int i = 1; i <= 30; i++) 
      { 
       lst.Add(RandomString(i)); 
      } 

      GridView1.DataSource = lst; 
      GridView1.DataBind(); 
      SetPageNumbers(); 
     } 

    } 

    private void SetPageNumbers() 
    { 
     if (GridView1.PageIndex == 0) 
     { 
      (GridView1.BottomPagerRow.FindControl("btnPreviousPage")as LinkButton).Enabled = false; 

     } 

     if(GridView1.PageIndex ==GridView1.PageCount-1) 
     { 
      (GridView1.BottomPagerRow.FindControl("btnNextPage") as LinkButton).Enabled = false; 
     } 

    } 

    protected void ChangePage(object sender, CommandEventArgs e) 
    { 

     switch (e.CommandName) 
     { 
      case "Prev": 
       GridView1.PageIndex = GridView1.PageIndex - 1; 
       break; 

      case "Next": 
       GridView1.PageIndex = GridView1.PageIndex + 1; 
       break; 
     } 
     GridView1.DataSource = lst; 
     GridView1.DataBind(); 
     SetPageNumbers(); 
    } 


    public static string RandomString(int size) 
    { 

     StringBuilder builder = new StringBuilder(); 
     for (int i = 0; i < size; i++) 
     { 

      //26 letters in the alfabet, ascii + 65 for the capital letters 
      builder.Append(Convert.ToChar(Convert.ToInt32(Math.Floor(26 * _random.NextDouble() + 65)))); 

     } 
     return builder.ToString(); 

    } 


} 

希望這有助於

+0

有趣的是,我真的沒有嘗試過的代碼。我曾經像之前提到的那樣設定它。試試嗎? – ram 2009-12-19 19:24:48

+0

你可以發佈你的代碼前(aspx/ascx)爲您的網格嗎?讓我看一看。另外,你是否在分頁後將數據綁定到網格? – ram 2009-12-19 19:39:31

+0

@Ram:我只顯示一次數據綁定的GridView,並且在'OnLoad'(如果'!IsPostBack')。我在這個問題中加了'ascx'。 – 2009-12-19 19:47:48

0

是否有機會你的CSS是設置enabled屬性?

我複製了你的代碼沒有CSS,它對我來說工作正常。

如何發佈您的CSS?

+0

對不起,但我積極的CSS不是這裏的問題。 – 2009-12-20 13:07:15