Элементы управления подкачкой не отображаются в Gridview - PullRequest
1 голос
/ 31 марта 2011

Я установил AllowPaging = True для вида сетки в моем проекте. Когда я связываю его, я знаю, что возвращаю более 100 строк, а для параметра PageSize установлено значение 50. Тем не менее, я не вижу никаких элементов управления подкачкой внизу (как это настроено для отображения).

<asp:GridView ID="GridView1" runat="server" BackColor="White" 
    BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    GridLines="Vertical"  OnRowDataBound="GridView1_RowDataBound" onselectedindexchanged="GridView1_SelectedIndexChanged" 
    AlternatingRowStyle-BackColor="#f0f1f3" AutoGenerateColumns="False" 
    AllowPaging="True" AllowSorting="True" PageSize="50" >

Мне не удалось найти что-либо с помощью поиска, который помог. У кого-нибудь есть идеи о том, что может быть причиной того, что представление сетки не отображает элементы управления подкачкой?

Спасибо.

edit: я думаю, что причина может быть связана с этой информацией из MSDN:

2. Если элемент управления GridView связан с элементом управления источником данных, который не поддержка возможности подкачки напрямую или если элемент управления GridView привязан к структуре данных в коде через свойство DataSource, Элемент управления GridView будет выполнять пейджинг получая все записи данных из источника, отображая только записи для текущей страницы, и откажитесь от всего остального. Это поддерживается только когда источник данных для Элемент управления GridView возвращает коллекцию который реализует ICollection интерфейс (включая наборы данных).

Примечание. Если источник данных не поддержка подкачки напрямую и не реализовать интерфейс ICollection, элемент управления GridView не может создать страницу. За Например, если вы используете SqlDataSource и установите его Свойство DataSourceMode для DataReader, элемент управления GridView не может реализовать пейджинг.

Я связываю gridview с запросом linq.

1 Ответ

1 голос
/ 31 марта 2011

Пожалуйста, обратитесь к этой странице:
http://www.dbtutorials.com/display/linq-to-sql-paging-cs.aspx

Если вы используете ObjectDataSource, обратитесь к этому:
http://www.devtoolshed.com/content/gridview-objectdatasource-linq-paging-and-sorting

ИЛИ Если вы не используете объект источника данных, вы можете преобразовать запрос LINQ в таблицу данных и выполнить привязку к ней;Таблицы данных поддерживают подкачку страниц.Ниже приведена страница с кодом, необходимым для преобразования запроса LINQ в таблицу данных:
http://www.c -sharpcorner.com / UploadFile / VIMAL.LAKHERA / LINQResultsetToDatatable06242008042629AM / LINQResultsetToDatatable.aspx

Если вы делаете это вторым способом, вам нужно будет кэшировать таблицу данных при первом извлечении ее с сервера (SQL), если вы не хотите запрашивать сервер каждый раз, когда пользователь переключает страницы.Ваш код для событий GridView будет следующим:

РЕДАКТИРОВАТЬ : я исправил метод LoadData () ниже.

private DataTable CachedDataTable
{
    get
    {
        try
        {
            return (DataTable) Session["CachedDataTable"];
        }
        catch
        {
            return null;
        }
    }
    set
    {
        Session["CachedDataTable"] = value;
    }
}

private void LoadData()
{
    CachedDataTable = YourLinqQueryHere();
    gvGrid.DataSource = CachedDataTable;
    gvGrid.DataBind();
}

protected void gvGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvGrid.PageIndex = e.NewPageIndex;
}

protected void gvGrid_PageIndexChanged(object sender, EventArgs e)
{
    gvGrid.DataSource = CachedDataTable;
    gvGrid.DataBind();
}
...