【问题标题】:asp.net gridview dynamically bindingasp.net gridview 动态绑定
【发布时间】:2011-06-30 15:38:43
【问题描述】:

我有一个 GridView,

<asp:GridView ID="managerList" runat="server" DataSourceID="SqlDataSource2">

在后面的代码中,

protected void Page_Load(object sender, EventArgs e)
{
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
}

当我加载页面时,它工作正常,分页也工作正常。

然后我想通过单击搜索按钮来获取列表的子集:

protected void btnSearch_Click(object sender, EventArgs e)
{
    SqlDataSource2.SelectCommand = "select * from manager where age > 30";
    managerList.DataBind();
}

它工作正常,给我列表的子集。

但是,当我单击“下一页”时,它会给我整个列表,第 2 页。我知道这是因为它发送回发,并且绑定了原始选择命令。但是,当我单击“下一页”时,我该怎么做才能给我列表的子集?

谢谢!

更新: 如果我把代码改成这样:

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
  {
    SqlDataSource2.SelectCommand = "select * from manager";
    managerList.AllowPaging = true;
  }
}

当我点击“下一页”时,它给了我一个空列表。

可能想添加 IsPostBack,但这不起作用。

【问题讨论】:

    标签: c# asp.net gridview paging page-index-changed


    【解决方案1】:

    在 PageIndexChanging 事件中添加 NewPageIndex 代码:

    managerList.PageIndex = e.NewPageIndex;
    bindgrid();
    

    【讨论】:

      【解决方案2】:

      以下内容可能对您有所帮助

      protected void Page_Load(object sender, EventArgs e)
      {
      if (!IsPostBack)
          {
          SqlDataSource2.SelectCommand = "select * from manager";
          managerList.AllowPaging = true;
          }
      
      }
      

      【讨论】:

      • 不,不会的。当我点击“下一页”时,它给了我一个空列表。
      • protected void managerList_PageIndexChanging(object sender, GridViewPageEventArgs e) { managerList.PageIndex = e.NewPageIndex;绑定网格(); }
      【解决方案3】:

      您需要将代码放在 page_load 事件中的!IsPostBack() 下。喜欢...

      protected void Page_Load(object sender, EventArgs e)
      {
        if(!IsPostBack)
        {
          SqlDataSource2.SelectCommand = "select * from manager";
          managerList.AllowPaging = true;
        }
      }
      

      原因:每当您点击下一步按钮时,您的页面加载事件都会在 Gridview 的 PageIndexChanging 事件处理程序之前调用。

      【讨论】:

        【解决方案4】:

        Page_Load 每次加载页面时都会触发,包括回发,因此您的选择语句会被重置。尝试设置 viewstate 值以保留您的 select 语句。

        【讨论】:

          【解决方案5】:

          将最新的 SQL 查询存储在全局静态字符串中,然后使用以下代码。

          static String previousSQL_Query;
          
          protected void Page_Load(object sender, EventArgs e)
          {
            if(IsPostBack)
            {
              SqlDataSource2.SelectCommand = previousSQL_Query;
            }
            else
            {
                 SqlDataSource2.SelectCommand = "select * from manager";
                 managerList.AllowPaging = true;
            }
          }
          
          protected void btnSearch_Click(object sender, EventArgs e)
          {
              SqlDataSource2.SelectCommand = "select * from manager where age > 30";
              previousSQL_Query = SqlDataSource2.SelectCommand;
              managerList.DataBind();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-22
            相关资源
            最近更新 更多