根据下拉列表显示gridview中的结果数量?

时间:2009-01-06 20:26:17

标签: c# asp.net gridview datatable

我有一个数据表,可以返回大约30,000条记录。我在ASP:GridView控件中显示这些记录。我有一个下拉控件,我希望用户能够选择要在GridView中显示的记录数。默认值应为All,但它也可以包含值,例如20,50,100。我不太清楚如何做到这一点。

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

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

5 个答案:

答案 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。