我有一个数据表,可以返回大约30,000条记录。我在ASP:GridView控件中显示这些记录。我有一个下拉控件,我希望用户能够选择要在GridView中显示的记录数。默认值应为All,但它也可以包含值,例如20,50,100。我不太清楚如何做到这一点。
如果我没有打开Paging怎么办? PageSize还能用吗?
我硬编码了GridView.PageSize = 1,它仍然返回了所有记录。
答案 0 :(得分:2)
使用gridview的PageSize属性。 Link。
答案 1 :(得分:2)
您可以将下拉列表的值(20,50,100)添加到查询中,这样您就只能选择前(20,50,100)条记录。
您是否也将使用分页?
答案 2 :(得分: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
)
显然,需要更多关注排序等。
答案 3 :(得分: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)
答案 4 :(得分: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。