Общее количество строк в элементе управления GridView с использованием LinqDataSource и подкачки

У меня проблема с получением общего количества строк для элементов, отображаемых в Gridview, с использованием Paging и с LinqDataSource в качестве источника данных.

Я пробовал несколько подходов:

protected void GridDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)  
{  
    totalLabel.Text = e.TotalRowCount.ToString();  
}

возвращает -1 каждый раз.

protected void LinqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)  
{  
    System.Collections.Generic.List<country> lst  = e.Result as System.Collections.Generic.List<country>;  
    int count = lst.Count;  
}

только дает мне счет для текущей страницы, а не общий.

Любые другие предложения?

5 ответов

LinqDataSourceEventArgs, возвращаемый в этих событиях, возвращает -1 в следующих случаях:

-1, если объект LinqDataSourceStatusEventArgs был создан во время операции изменения данных; -1, если вы включили настраиваемую подкачку страниц, установив для AutoPage значение true и для RetrieveTotalRowCount значение false.

Проверьте здесь для получения дополнительной информации - таблица внизу показывает различные свойства, которые нужно установить, чтобы вернуть количество строк, но похоже, что вы должны либо установить для свойств AutoPage и AllowPage либо значение true, либо оба значения false.

Судя по таблице в приведенной выше ссылке и приведенному вами примере, для Autopage установлено значение false, а для AllowPaging установлено значение true, поэтому он возвращает количество строк на странице.

НТН

Я застрял с той же проблемой. Я решил свою проблему с помощью следующей строки кода

protected void LinqDataSourcePoints_Selected(отправитель объекта, LinqDataSourceStatusEventArgs e) { totalRecords = (e.Result as List).Count; }

Объяснение: 1-Анализировать e.Result в качестве источника данных. 2-Получить счет.

Работай идеально для меня.

Попробуйте это, я проверил, и он возвращает все строки.

  protected void LinqDataSource1_Selecting(object sender, LinqDataSourceStatusEventArgs e)
        {
           System.Collections.Generic.List<country> lst  = e.Result as System.Collections.Generic.List<country>;

           int count = lst.Count;
        }

убедитесь, что ваше событие "Выбор"

Свойство TotalRowCount действует только для определенных значений AutoPage и AllowPaging. Они оба должны быть истинными (в вашем случае) или оба должны быть ложными.

проверьте следующую страницу для объяснения свойства TotalRowCount.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linqdatasourcestatuseventargs.totalrowcount.aspx

Ну, я уже установил для AutoPage и AllowPaging значение true. Я подтвердил, что RetrieveTotalRowCount установлен в true, проверив его значение в режиме отладки (не смог найти, где изменить его значение).

И это все еще возвращает -1.

Единственное, чего не хватает:

-1, если объект LinqDataSourceStatusEventArgs был создан во время операции изменения данных;

и я не совсем уверен, что это значит. Я использую модифицированную версию LinqDataSource, чтобы включить некоторую пользовательскую фильтрацию, так что это может быть проблемой. С другой стороны, пока я возился в режиме отладки, мне удалось проверить значение arguments.TotalRowCount, и оно было правильным. Но значение, которое появляется в событии Selected, всегда равно -1.

Другие вопросы по тегам