Gridview исчезает при обратной передаче, когда включена подкачка - PullRequest
4 голосов
/ 25 февраля 2009

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

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

Ответы [ 2 ]

4 голосов
/ 25 февраля 2009

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

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

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

  1. GridView: AllowPaging и, конечно, вам нужно установить PageSize.
  2. ObjectDataSource: EnablePaging, также вам необходимо установить:
    • MaximumRowsParameterName = "maxRows"
    • StartRowIndexParameterName = "startRowIndex"
    • SelectCountMethod = "RecordCount"

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

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

0 голосов
/ 26 августа 2015

Чтобы ответить больше на ответ @ adam0101, что я думаю он подразумевает под "... Оказывается, мой пользовательский источник данных возвращал ноль для количества записей ." что вам, возможно, потребуется « повторно присоединить » к источнику данных к представлению таблицы. ASP.net автоматически знает, что вы получаете запись «-n», где «n» - это следующий первый ряд следующей страницы. Это решение больше подходит для случаев, когда вы не хотите, чтобы asp.net автоматически обрабатывал данные в вашем сеточном представлении, возможно, из-за необходимости загружать данные после другого события (например, кнопка LOAD DATA), а не когда страница загружена в первый раз. Но, как упомянул Адам ниже, настоящей причиной было то, что он «... создал подкласс источника данных, который унаследовал ObjectDataSource, но он был реализован неправильно». Извините за моё предположение, Адам. Спасибо

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

т

Установите свой 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">

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

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
        }
...