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

StackOverflow https://stackoverflow.com/questions/417988

Вопрос

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

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

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

Это было полезно?

Решение

Если вы хотите, чтобы 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)

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top