GridView: Почему я все еще должен делать свою собственную сортировку и разбиение по страницам? - PullRequest
0 голосов
/ 08 июня 2011

Когда я уже включил подкачку и сортировку для элемента управления GridView?Вот мой код aspx:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True">
    </asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:plantsSQLConnectionString %>" 
    SelectCommand="SELECT * FROM [Plants]"></asp:SqlDataSource>

Я выполняю запрос и привязку данных в Page_Load (), и данные отображаются правильно.Я ожидал, что GridView будет обрабатывать страницы и сортировку для меня, но когда я попытался выполнить страничку или сортировку, страница потерпела крах, и мне сказали предоставить обработчики Sorting и PageIndexChanging.Что я сделал не так?Спасибо.

Вот мой код позади.Вы можете предположить, что GetData работает, потому что я вижу записи, отображаемые правильно.

protected void Page_Load(object sender, EventArgs e)
    {
        // Declare the query string.        
        String queryString = "Select * from plants";

        // Run the query and bind the resulting DataSet
        // to the GridView control.
        DataSet ds = GetData(queryString);
        if (ds.Tables.Count > 0)
        {
            GridView1.DataSource = ds;
            GridView1.DataBind();
        }


    }

Дополнительные сведения: Если я не выполняю код позади и не выполняю запрос в файле aspx, то GridView может автоматически сортировать и просматривать страницы.[Имеется в виду, что я использовал мастер и подключил GridView к источнику данных в файле aspx, в результате чего ID источника данных был связан с элементом управления GridView.] Как он может выполнять разбиение по страницам и сортировку в этом случае, а не при перемещении кода в PageLoad?Спасибо за понимание.

1 Ответ

1 голос
/ 08 июня 2011

GridView еще не знает, как сортировать, если пользователь нажимает на столбец.Поэтому вам нужно предоставить SortExpression для сортируемых столбцов.Также вы можете захотеть предоставить дополнительную функциональность для сортировки по возрастанию / убыванию, если пользователь дважды щелкнул по одному и тому же столбцу.Поэтому вам нужно хранить текущее SortExpression + SortDirection где-нибудь, например, во ViewState.

Некоторые соображения, почему и когда сортировка может не работать автоматически:

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

Вот дополнительная информация о сортировке: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.allowsorting.aspx

Некоторые соображения, почему и когда подкачка может не работать автоматически:

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

Ниже приводится дополнительная информация о том, почему GridView может не поддерживать пейджинг напрямую: http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx

Редактировать : Не забудьте проверить ! Page.IsPostback в Page_Load перед тем, как связать данные с GridView!В противном случае GridView получит старые данные / пейджинг / сортировку и т. Д. В обратных передачах.

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