Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET GridView,分页后启用/禁用按钮_C#_Asp.net_Gridview_User Controls_Pagination - Fatal编程技术网

C# ASP.NET GridView,分页后启用/禁用按钮

C# ASP.NET GridView,分页后启用/禁用按钮,c#,asp.net,gridview,user-controls,pagination,C#,Asp.net,Gridview,User Controls,Pagination,我现在已经成功地实现了GridView,但是,像往常一样,整个ASP.NET生命周期的事情困扰着我。我不明白为什么这样不行。我已将GridView的OnPageIndexchange绑定为: protected void GridView_PageIndexChanged(object sender, EventArgs e) { // Enable/disable the previous/next buttons. LinkButton btnNextPage = (Link

我现在已经成功地实现了GridView,但是,像往常一样,整个ASP.NET生命周期的事情困扰着我。我不明白为什么这样不行。我已将GridView的OnPageIndexchange绑定为:

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>

新活动
旧活动

我调试我的应用程序,看到代码正在运行,并且做了正确的事情,但是由于某些原因,当呈现控件时,这两个按钮始终处于启用状态。我做错了什么?

如果我是你,我会在“GridView\u PageIndexChanged”方法中这样编码

编辑:您还可以尝试添加setter吗

set
{
 gvTable.BottomPagerRow.FindControl("btnNextPage") as LinkButton  =value;
}
编辑:好的,我的朋友,我终于想出了一个解决办法。可能不是很优雅,但它工作,我测试了它。有几件事需要注意: 1.我们有一个“Prev”和一个“Next”按钮,我们需要处理这些按钮的“OnCommand”事件,因为我们使用自己的寻呼机模板 2.我们必须在处理OnCommand事件后绑定数据

我有一个静态的
列表
,我在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();

    }


}
公共部分类测试页:System.Web.UI.Page
{
私有静态随机_Random=新随机();
静态列表lst=新列表();
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{

对于(int i=1;i您的CSS是否有可能设置enabled属性

我在没有CSS的情况下复制了你的代码,对我来说效果很好


发布你的css怎么样?

有趣,老实说,我没有尝试代码。我以前是按照我前面提到的方式设置的。试试吧?你能在前面发布代码吗(aspx/ascx)对于您的网格?让我看看。另外,在分页之后,您是否再次将数据绑定到网格?@Ram:我只显式地将GridView数据绑定一次,这是在
OnLoad
(如果
!IsPostBack
)。我在问题中添加了
ascx
。非常感谢,Ram,我会给您10次“接受”如果我能为这一巨大的努力。遗憾的是,我们似乎无法解决OnPageIndexchange的问题。:(对不起,但我肯定CSS不是这里的问题。
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();

    }


}