【问题标题】:Save values on Postback在回发中保存值
【发布时间】:2011-12-02 04:47:07
【问题描述】:

我一直在为数据网格进行自定义分页,其中我每页只检索 10 个值。所以,我开始这样做了:

    <asp:GridView ID="grid1" runat="server" 
    >  </asp:GridView>

    <asp:Button ID="Btn_Previous" CommandName="Previous" runat="server"   
      OnCommand="ChangePage" Text="Previous" />
    <asp:Button ID="Btn_Next" runat="server" CommandName="Next" OnCommand="ChangePage" 
    Text="Next" />
   <asp:Label ID="lblTotalPages" runat="server"></asp:Label>
   <asp:Label ID="lblCurrentPage" runat="server"></asp:Label>

     protected int currentPageNumber = 1;
    protected const int PAGE_SIZE = 10;
    protected int startrowindex=1;

    protected void Page_Load(object sender, EventArgs e)
    {

        BindData();
    }
    private void BindData()
    {

        using (SqlConnection conn = new SqlConnection("Data Source=NISHANTH-PC\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"))
        {
            conn.Open();
            SqlCommand myCommand = new SqlCommand("GetProductsPaged",
                                                   conn);
            myCommand.CommandType = CommandType.StoredProcedure;

            myCommand.Parameters.AddWithValue("@startRow",
                                              startrowindex);
            myCommand.Parameters.AddWithValue("@maximumRows", PAGE_SIZE);
            myCommand.Parameters.Add("@totalRows", SqlDbType.Int, 4);
            myCommand.Parameters["@totalRows"].Direction = ParameterDirection.Output;



            SqlDataAdapter ad = new SqlDataAdapter(myCommand);

            DataSet ds = new DataSet();
            ad.Fill(ds);

            grid1.DataSource = ds;
            grid1.DataBind();

            double totalRows = (int)myCommand.Parameters["@totalRows"].Value;

            lblTotalPages.Text = CalculateTotalPages(totalRows).ToString();

            lblCurrentPage.Text = currentPageNumber.ToString();

            if (currentPageNumber == 1)
            {
                Btn_Previous.Enabled = false;

                if (Int32.Parse(lblTotalPages.Text) > 0)
                {
                    Btn_Next.Enabled = true;
                }
                else
                    Btn_Next.Enabled = false;

            }

            else
            {
                Btn_Previous.Enabled = true;

                if (currentPageNumber == Int32.Parse(lblTotalPages.Text))
                    Btn_Next.Enabled = false;
                else Btn_Next.Enabled = true;
            }
            conn.Close();
        }
    }
    private int CalculateTotalPages(double totalRows)
    {
        int totalPages = (int)Math.Ceiling(totalRows / PAGE_SIZE);

        return totalPages;
    }
    protected void ChangePage(object sender, CommandEventArgs e)
    {

        switch (e.CommandName)
        {
            case "Previous":
                currentPageNumber = currentPageNumber - 1;
                startrowindex = startrowindex - 10;
                break;

            case "Next":
                currentPageNumber = currentPageNumber + 1;
                startrowindex = startrowindex + 10;
                break;
        }

        BindData();
    } 

基本上,我的问题是页面加载时网格工作正常。然后,由于上一个是隐藏的,当我单击下一个时,它会转到第二页并完美地检索值。但是当我现在点击下一个或上一个时,一切都出错了。我认为的原因是,当我回来时,顶部的 currentpagenumber 值再次变为 1,而 startroeindex 也变为 1。你能告诉我如何处理这个问题吗?

【问题讨论】:

    标签: asp.net datagrid


    【解决方案1】:

    我不知道你的 aspx 页面,但你需要一种方法来发送上一个页码。否则,您的脚本不知道除了 1+1 之外的下一个含义。你如何改变页面?超链接?如果是这样,请在表单字段或查询字符串中发送最后一页。

    【讨论】:

    • 我更新了代码。在 buttonclick 我来到同一页面。只是我改变了网格页面......所以你认为我需要将它作为查询字符串传递,但我不做任何重定向
    【解决方案2】:

    第一件事是您在每次回帖时都加载 BindData,您只能在第一次加载时调用它。

    第二件事,您正在存储 in 标签,lblCurrentPage.Text = currentPageNumber.ToString(); 那么为什么不使用它并在 page_load 事件中再次存储它。

    我在这里提供了 page_load 事件试试这个。

    protected void Page_Load(object sender, EventArgs e)
    {
       currentPageNumber = Convert.ToInt32(lblCurrentPage.Text);
       if(!IsPostback)
       {
          BindData();
       }
    }
    

    请将 lblCurrentPage.Text 的默认值添加到 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多