1

我有一个返回大约 30,000 条记录的数据表。我在 ASP:GridView 控件中显示这些记录。我有一个下拉控件,我希望用户能够在其中选择要在 GridView 中显示的记录数。默认值应该是全部,但它也可以具有诸如 20、50、100 之类的值。我不太确定该怎么做。

如果我没有打开分页怎么办。PageSize 还能用吗?

我对 GridView.PageSize = 1 进行了硬编码,它仍然返回了所有记录。

4

5 回答 5

2

使用 gridview 的 PageSize 属性。链接

于 2009-01-06T20:29:18.680 回答
2

您可以将下拉列表的值 (20, 50, 100) 添加到查询中,以便仅选择顶部 (20, 50, 100) 记录。

你也要使用分页吗?

于 2009-01-06T20:31:23.310 回答
2

在数据选择中,分页应该总是尽可能早地处理。您不想从数据库检索 30,000 条记录到应用服务器,然后只显示其中的 50 条。

类似于:(用于选择第 3 页,每页 50 个)

select top 50 from x where pk not in (select top 100 pk from x)

翻译为:

CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize 
FROM x
WHERE pk NOT IN 
(
 SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)

显然,在排序等方面需要更加小心。

于 2009-01-06T22:16:51.303 回答
2

如果您希望 PageSize 有效,您必须将 GridView 的 AllowPaging 设置为 true。显然,您必须创建管理事件 PageIndexChanging 的方法。

像这样:

protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{
     myGvw.PageIndex = e.NewPageIndex;
     // then recall the method that bind myGvw
}

DropDown 可以将属性 AutoPostBack 设置为 true 并且您必须在他的 OnSelectedIndexChanged 上设置

myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)
于 2009-01-07T01:09:12.827 回答
1

这就是我要做的。首先,我会在 DataTable 中添加一个列,如果它还没有的话,它将作为一个计数器。然后,将 GridView 绑定到 DataView。这是一些代码来演示我在说什么:

            //add column with counter
            table.Columns.Add("counter", typeof(int));
            for (int i = 0; i < table.Rows.Count; i++)
            {
                table.Rows[i]["counter"] = i+1;
            }

然后,从 DataTable 中获取默认视图并设置 RowFilter:

            DataView view = table.DefaultView;
            view.RowFilter = "counter <= 100"; //or whatever number the user selected

最后,只需将 GridView 直接绑定到 DataView 即可。

于 2009-01-06T20:47:09.657 回答