我正在使用C#,。net 4开发一个Web应用程序。我有一个绑定到SqlDataSource的网格视图。这个数据源有大约一个以上的crore记录。这是因为我允许分页。我在同一页面上有一个过滤条件。用户使用复选框选择选项。然后在过滤器Button事件中,我编写了一些代码,根据SqlDataSource的过滤器选项构建一个新的SELECT命令。并在构建新查询后。我写了另一行代码:
DataGridView.SelectCommand = FilteredQuery;
因此,当用户单击FilterButton时,gridview会显示已过滤的数据。正如我告诉过你的,我允许传呼。因此,在过滤后,当我选择该gridview的下一个按钮时,它会显示整个数据而不是Filtered。我认为这是因为它回发页面并根据SqlDataSource的预定义SELECT命令绑定gridview。
我尝试了很多方法。我使用静态bool变量来跟踪page_load事件。它工作正常。但是当我从一个页面到另一个页面时,它仍然会遇到麻烦。当我回到这个页面时,它仍然显示过滤后的数据。
我的时间非常少。请尽快指导我。请记住,我是dot net技术的新手。因此,任何详细的指导将受到高度赞赏。感谢。
最诚挚的问候!
答案 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查询,如上例所示。