Показать количество результатов в gridview на основе раскрывающегося списка? - PullRequest
1 голос
/ 06 января 2009

У меня есть таблица данных, которая возвращает около 30 000 записей. Я отображаю эти записи в элементе управления ASP: GridView. У меня есть выпадающий элемент управления, в котором я хочу, чтобы пользователь мог выбрать количество записей для отображения в GridView. Значением по умолчанию должно быть Все, но оно также может иметь значения, например 20, 50, 100. Я не совсем уверен, как это сделать.

Что делать, если у меня не включен пейджинг. Будет ли PageSize все еще работать?

Я жестко запрограммировал GridView.PageSize = 1, и он все еще вернул все записи.

Ответы [ 5 ]

2 голосов
/ 07 января 2009

Если вы хотите, чтобы PageSize работал, у вас есть , чтобы установить для параметра AllowPaging of GridView значение 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)
2 голосов
/ 07 января 2009

Пейджинг всегда следует учитывать как можно раньше при выборе данных. Вы не хотите получать 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
)

Очевидно, что при сортировке и т. Д. Необходимо уделять больше внимания

2 голосов
/ 06 января 2009

Вы можете добавить значение раскрывающегося списка (20, 50, 100) к вашему запросу, чтобы выбрать только верхние (20, 50, 100) записи.

Собираетесь ли вы использовать пейджинг?

2 голосов
/ 06 января 2009

Используйте свойство PageSize вида сетки. Link .

1 голос
/ 06 января 2009

Вот что я бы сделал. Во-первых, я бы добавил в 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 напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...