我有一个数据表,它返回大约30,000条记录。我在ASP中显示这些记录:GridView控件。我有一个下拉控件,我希望用户能够选择要在GridView中显示的记录数。默认值应该是All,但也可以有20,50,100等值。我不太确定如何做到这一点。根据下拉菜单显示gridview中的结果数量?
如果我没有启用Paging,该怎么办? PageSize仍然有效吗?
我硬编码GridView.PageSize = 1,它仍然返回所有记录。
我有一个数据表,它返回大约30,000条记录。我在ASP中显示这些记录:GridView控件。我有一个下拉控件,我希望用户能够选择要在GridView中显示的记录数。默认值应该是All,但也可以有20,50,100等值。我不太确定如何做到这一点。根据下拉菜单显示gridview中的结果数量?
如果我没有启用Paging,该怎么办? PageSize仍然有效吗?
我硬编码GridView.PageSize = 1,它仍然返回所有记录。
如果你想让PageSize工作,有来设置GridView的AllowPaging为true。 显然你必须创建管理事件PageIndexChanging的方法。
像这样:
protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
myGvw.PageIndex = e.NewPageIndex;
// then recall the method that bind myGvw
}
下拉本来属性的AutoPostBack设置为true,并在他的OnSelectedIndexChanged您必须设置
myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)
使用gridview的PageSize属性。 Link。
您可以将下拉列表中的值(20,50,100)添加到查询中,以便只选择顶部(20,50,100)记录。
你打算使用分页吗?
这是我会做的。首先,我会向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直接绑定到数据视图。
在数据选择中应该尽可能早地处理分页。您不想从数据库检索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
)
显然更关心将需要大约排序等
当他们只选择数据的子集,意味着什么每页100个,还是100个? – BFree 2009-01-06 20:30:22
这意味着100总数。我禁用了分页功能。 – Xaisoft 2009-01-06 20:32:43
世界上没有一个用户可以一次理解30k行。我最多可以将它设置为100,并允许在任何列上进行排序。然后,如果他们只想一次看到X,则可以更改页面大小的值。 – jcollum 2009-01-06 22:23:45