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

У меня проблема с получением общего количества строк для элементов, отображаемых в Gridview с использованием разбиения на страницы и 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;  
}

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

Есть другие предложения?


person Farinha    schedule 26.08.2008    source источник


Ответы (5)


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

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

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

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

HTH

person JamesSugrue    schedule 26.08.2008

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

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

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

person tgmdbm    schedule 26.08.2008

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

И он по-прежнему возвращает -1.

Не хватает только:

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

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

person Farinha    schedule 26.08.2008

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

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

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

У меня отлично работает.

person Mamoon ur Rasheed    schedule 27.07.2010

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

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

убедитесь, что ваше мероприятие - «Выбор».

person Nick Kahn    schedule 27.07.2010
comment
Это очень плохое решение, потому что оно приведет к получению всех записей с сервера. - person Michael Feinstein; 26.09.2013