【问题标题】:How to Fetch All Rows Of Gridview When Paging is Enabled??启用分页时如何获取 Gridview 的所有行?
【发布时间】:2019-02-20 13:05:14
【问题描述】:

启用分页时如何获取所有gridview的行?

它只允许获取当前的获取行而不是整个 gridview 行。

【问题讨论】:

  • 你不能得到Datasource 在那里你可以得到所有的行吗?
  • 这是否意味着您想知道如何禁用分页? ;)
  • 这背后的目的是什么..?
  • 实际上 gridview 正在加载页面,然后我在 gridview 上选择了一些 checkboxex ...然后我将转到 gridview 的第二页,我试图选择其他复选框,但是当我保存所有数据时它是只保存当前页面数据而不是所有gridview页面
  • 我正在获取所有已选中复选框的行已通过使用进行检查。 grdSupplierSearch.Rows.Cast() .Where(a => ((CheckBox)a.FindControl("ckbSelectCompany")).Checked && selectedCompanyNames.Contains(((Label)a.FindControl("lblCompanyNameGrid"))。文本)) .ToList();但它只允许保存当前页面数据,这些数据被检查而不是 gridview 的其他页面。

标签: asp.net


【解决方案1】:

您可以使用我在项目中使用的下面的命令。它的逻辑非常简单,您浏览所有页面,并且在每个页面中您浏览所有行。您还可以在执行此操作之前获取当前页面,然后在循环所有内容之后返回该页面;)

//Get Current Page Index so You can get back here after commands
                int a = GridView1.PageIndex;
    //Loop through All Pages
                for (int i = 0; i < GridView1.PageCount; i++)
                {
    //Set Page Index
                    GridView1.SetPageIndex(i);
    //After Setting Page Index Loop through its Rows
                    foreach (GridViewRow row in GridView1.Rows)
                    {
                        //Do Your Commands Here
                    }
                }
    //Getting Back to the First State
                GridView1.SetPageIndex(a);

【讨论】:

  • 这是更简单的方法。关闭或打开 AllowPaging 充满了问题,尤其是如果您不想破坏客户端正在查看的页面(看到 GridView 突然展开和缩小看起来不太好),如果您有复选框怎么办所有的页面和一些被打勾和没有打勾?它还有很多其他功能,而且要通过 ViewState 来控制它会变得很混乱。
  • 到目前为止,这是更好的答案。我会说唯一的答案。不要试图轻视接受的回答者,因为它在技术上回答了这个问题,但这是一种不那么“hacky”的方式,也是一种更专业的做事方式。阅读此线程的任何人都应该绝对使用此方法而不是接受的答案。甚至不要质疑它。
  • 这很棒。比乱翻页更好
【解决方案2】:

我们暂时禁用分页并将重新绑定网格,以便现在我们可以访问数据源中的所有记录,而不仅仅是当前页面记录。

一旦 gridview 与所有记录绑定,您就可以遍历 gridview 行。

完成任务后,我们重新启用分页并重新绑定网格。

以下是解决您的病情的方法:

protected void Page_Load(object sender, EventArgs e)
{
    GridView2.AllowPaging = false;
    GridView2.DataBind(); 

    // You can select some checkboxex on gridview over here..

    GridView2.AllowPaging = true;
    GridView2.DataBind(); 
}

【讨论】:

  • 谢谢@Vishal Suthar 完成了。
  • 如果真的有帮助,那么您可以接受答案。请参考:(meta.stackexchange.com/a/5235/189169)
  • 是的,不调用 databind() 就无法工作。谢谢,这对我也有帮助。
  • 此方法有效,但使用有风险。如果有人对代码进行了任何更改并且没有意识到分页在哪里关闭,您可能会导致某些人的 Web 浏览器崩溃。设置页面索引更安全。
【解决方案3】:

使用以下代码并禁用 GridView 分页

GridView1.AllowPaging = false; GridView1.DataBind();

在您想要显示所有 Gridview 行的页面加载或其他一些事件

【讨论】:

    【解决方案4】:

    在从网格中获取数据的函数之前只写

    yourGridName.AllowPaging=false;
    

    在获得数据写入之后

    yourGridName.AllowPaging=true;
    

    如果你的函数是 GetDataFromGrid() 那么你应该这样做

    protected void Page_Load(object sender, EventArgs e)
    {
    yourGridName.AllowPaging=false;
    GetDataFromGrid() 
    yourGridName.AllowPaging=true;
    }
    

    【讨论】:

      【解决方案5】:

      启用分页后,您无法显示所有行。但您可以在页面加载或某些事件的代码隐藏中创建Allowpaging=false;..

      protected void Page_Load(object sender, EventArgs e)
      {
      Gridviewname.AllowPaging=false;
      }
      

      Protected Void some event(object sender,Eventargs e)
      {
      Gridviewname.AllowPaging=false;
      }
      

      【讨论】:

        【解决方案6】:

        更好的方法是在页面顶部(gridview 之外)放置一个隐藏字段,然后单击复选框,您应该将相关的 id 或某个值以逗号分隔格式放置在隐藏字段中。在提交表单时,您可以使用逗号分隔隐藏字段值字符串,然后就可以了。

        【讨论】:

          【解决方案7】:

          使用以下代码获取e.CommandArgument 的值。我一定会解决你的问题!

            protected void GridViewID_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                   if (e.CommandName == "GetDetail")
                   {
                      int index = Convert.ToInt32(e.CommandArgument) % GridViewID.PageSize; // !Important
          
                      GridViewRow row = GridViewID.Rows[index];
                   }
           }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-24
            • 1970-01-01
            相关资源
            最近更新 更多