Просмотр сетки исчезает при обратной передаче, когда включена подкачка страниц

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

Вопрос

У меня есть gridview, для свойства DataSourceID которого установлено значение пользовательского объекта ObjectDataSource .Когда значение AllowPaging равно True, просмотр сетки исчезает после обратной отправки.Если я установлю значение AllowPaging равным False, все будет в порядке.Может ли кто-нибудь пролить некоторый свет на это для меня?:)

Редактировать: Другая вещь, которая меня смущает, это то, что я подумал, что если вы установите Идентификатор источника данных что сетка будет получать данные из источника данных всякий раз, когда ей это нужно.Если сетка исчезает, потому что в ней нет данных, почему gridview не получает необходимые данные из источника данных?

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

Решение

Вполне возможно, что после выполнения обратной передачи источник данных не поддерживается или не пополняется, и в сетке нет элементов для заполнения.Правильно ли вы обрабатываете состояние объекта источника данных (повторная привязка / сохранение источника в рабочем состоянии) при включенной подкачке?

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

Редактировать:
Метод, о котором я думал, предназначался для подкачки / сортировки обратного вызова.Однако я нашел некоторую информацию о его ODS & Paging..убедитесь, что вы установили следующее:

  1. Просмотр сетки:Разрешить подкачку и, конечно, вам нужно установить размер страницы.
  2. ObjectDataSource Объект - источник данных:Включить подкачку, также вам необходимо установить:
    • MaximumRowsParameterName="Максимальные значения"
    • StartRowIndexParameterName="Стартовый индекс"
    • SelectCountMethod="Количество записей"

Я думаю, вам нужно установить только 3 подпункта пункта 2, если вы хотите вручную обрабатывать размер подкачки и т.д.

Тогда вы можете прочитать об этом подробнее здесь.

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

Чтобы подробнее ответить на ответ @adam0101, что Я думаю, что он имеет в виду "...Оказывается, мой пользовательский источник данных возвращал ноль для подсчета записей.", заключается в том, что вам, возможно, понадобится "повторно прикрепить" источник данных для просмотра сетки.ASP.net автоматически распознает, что вы восстанавливаете запись-'n', где 'n' - следующая первая строка следующей страницы.Это решение больше подходит для случаев, когда вы не хотите разрешать asp.net для автоматическая обработка данных в вашем gridview, возможно, из-за желания загрузить данные после другого события (например, кнопка ЗАГРУЗКИ ДАННЫХ), а не при первой загрузке страницы.Но, как упоминал Адам ниже, настоящей причиной было то, что он "... создал подкласс datasource, который унаследовал ObjectDataSource, но он был реализован неправильно"..Извините за мое предположение, Адам.Спасибо

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

ie

Установите свой GridView, как указано выше, и обратите внимание - без свойства DataSource!Вот мой пример:

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

Затем создайте частный метод или подпрограмму, к которой вы сможете обращаться, когда вам когда-либо понадобится принудительно перенести gridview на новую страницу.

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

Затем создайте OnPageIndexChanging способ:

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

Чтобы завершить этот ответ, вот мой код, в котором я загружаю данные, когда хочу, а не при запуске PostPack, который используется по умолчанию...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top