0

我正在使用 C#、.net 4 开发一个 Web 应用程序。我有一个绑定到 SqlDataSource 的网格视图。这个数据源大约有超过一千万条记录。这是因为,我允许分页。我在同一页面上有一个过滤条件。用户使用复选框选择选项。然后在过滤按钮事件中,我编写了一些代码,根据 SqlDataSource 的过滤选项构建一个新的 SELECT 命令。在建立一个新的查询之后。我写了另一行代码:

DataGridView.SelectCommand=过滤查询;

因此,当用户单击 FilterButton 时,gridview 会显示过滤后的数据。正如我告诉你的,我已经允许分页。因此,过滤后,当我选择该网格视图的下一个按钮时,它会显示整个数据而不是过滤后的数据。我认为这是因为它根据 SqlDataSource 的预定义 SELECT 命令回发页面并绑定网格视图。

我尝试了很多方法。我使用静态布尔变量来跟踪 page_load 事件。那么它工作正常。但是当我从一页导航到另一页时它仍然很麻烦。当我回到这个页面时,它仍然显示过滤后的数据。

我的时间非常少。请尽快指导我。请记住,我对点网技术完全陌生。因此,任何详细的指导都将受到高度赞赏。谢谢。

最好的祝福!

4

2 回答 2

0

您必须创建 OnPageIndex Changed 事件

<asp:GridView ID="yourGrid" runat="server" AutoGenerateColumns="false" OnPageIndexChanged="yourGrid_PageIndexChanged">

在后面的代码中

protected void yourGrid_PageIndexChanged(object sender, EventArgs e)
{
    if (filtered) // you would have to keep track of the filtered state of your grid possibly with hidden field
    {
        DataGridView.SelectCommand = FilteredQuery;
    }
}
于 2012-06-12T00:24:59.547 回答
0

SQLDATASOURCE 不会以这种方式工作。在每次页面更改时,您都需要重新创建 sql 查询。尝试在每次页面更改时跳过某些行。

这是一个给你的例子。

第 页 - 1

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY YOURKEY desc) AS rownumber,
    *
  FROM YOURTABLE
) AS ANYTHING
WHERE rownumber >= STARTING ROW and rownumber <= ENDINGROW

例如

 SELECT * FROM (
      SELECT
        ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
        *
      FROM Bowzer
    ) AS BowzerTable
    WHERE rownumber >= 10 and rownumber <= 20

第 2 页

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
    *
  FROM Bowzer
) AS BowzerTable
WHERE rownumber >= 20 and rownumber <= 30

第 页 - 3

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY bowzer_id desc) AS rownumber,
    *
  FROM Bowzer
) AS BowzerTable
WHERE rownumber >= 30 and rownumber <= 40

您需要在每次页面更改时重新创建 SQL 查询,如上例所示。

于 2012-06-12T04:49:40.083 回答