网格视图绑定到SqlDataSource创建分页问题

时间:2012-06-12 00:12:52

标签: c# asp.net visual-studio-2010 asp.net-4.0

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

DataGridView.SelectCommand = FilteredQuery;

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

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

我的时间非常少。请尽快指导我。请记住,我是dot net技术的新手。因此,任何详细的指导将受到高度赞赏。感谢。

最诚挚的问候!

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

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

这是一个例子。

FOR PAGE - 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

FOR PAGE - 2

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

对于PAGE - 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查询,如上例所示。