Как скрыть строки в GridView Telerik?

У меня есть WPF GridView, и часть данных должна отображаться в итоговых значениях (как в нижнем колонтитуле, так и в группе), но не в фактических записях данных.

Я думал, что будет легко написать триггер и скрыть строку на основе данных строки, однако оказалось, что Telerik GridView использует необычную панель для виртуализации, поэтому, хотя указанные строки скрываются, остается пустое место там, где они должен идти.

Вот мой нынешний стиль. Он скрывает строку, но это эквивалентно созданию видимости Hidden вместо Collapsed (скрывает элемент, но оставляет пробел там, где он есть)

<Style TargetType="{x:Type telerik:GridViewGroupRow}">
    <Setter Property="Visibility" Value="Visible" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Group.Key, RelativeSource={RelativeSource Self}}" Value="SomeValue">
            <Setter Property="Visibility" Value="Collapsed" />
        </DataTrigger>
    </Style.Triggers>
</Style>

Я попытался установить для ItemTemplate значение null, удалить элемент из GridViewVirtualizingPanel Telerik и настроить видимость, но ни один из этих параметров не работает.

Кто-нибудь знает, как я мог бы это сделать? Я либо хочу скрыть (и свернуть) строки на основе триггера, либо найти способ получить запрос текущего сгруппированного выражения, чтобы я мог запросить вторую коллекцию и отобразить результаты в итоговой группе. У меня нет проблем с использованием Code-Behind или чего-то хакерского для достижения этой цели.

Изменить

Интересно отметить, что я могу установить высоту равной 1, но не 0. Даже 1 — это слишком много, поскольку я могу скрыть тысячи записей, и на экране останется огромная белая область.


person Rachel    schedule 10.11.2011    source источник
comment
Вы можете использовать Snoop, чтобы узнать, какой элемент управления вам действительно нужно свернуть.   -  person Daniel Hilgarth    schedule 10.11.2011
comment
@DanielHilgarth Я пробовал, и мне не помогло. Строки (свернутые элементы) добавляются в пользовательский элемент GridViewVirtualizingPanel, который является пользовательским элементом управления Telerik, отображающим пробелы для свернутых элементов строки.   -  person Rachel    schedule 10.11.2011
comment
У меня была та же проблема, и я создал другое новое свойство только с геттером, и на геттере он возвращает основные значения списков, отфильтрованные с условием, что у меня есть   -  person Jamaxack    schedule 13.01.2016
comment
И привязка элементов GridView к новому созданному свойству   -  person Jamaxack    schedule 13.01.2016


Ответы (3)


Я опубликовал также вопрос на форумах Телерика, и, видимо, это невозможно. Мои варианты - либо отфильтровать набор результатов, либо установить для высоты строк значение 1.

Если я фильтрую набор результатов, мои агрегаты неверны. Если я установлю высоту строки на 1, я все равно получу большие пробелы, если скрыто много записей (а они есть).

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

person Rachel    schedule 01.12.2011

Если вы можете сделать это на С#, вот код для автоматического скрытия строки в привязке данных:

 protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
 {
   if (e.Item is GridDataItem)
   {
       GridDataItem item = (GridDataItem)e.Item;
       if (item.GetDataKeyValue("EmployeeID").ToString() == "4")  //set your condition for hiding the row
       {
           item.Display = false;  //hide the row
       }
   }
 }

Большинство элементов управления Telerik реагируют на такой шаблон, как:

GridEditableItem editedItem = e.Item as GridEditableItem;
editedItem.Display = false;

Вы также можете сделать столбцы:

GridColumn column = RadGrid1.MasterTableView.GetColumnSafe("CustomerID");
if(column != null)
{
column.Visible = !column.Visible;
RadGrid1.Rebind();
}

Вот аналогичный вопрос/ответ: Скрыть строку gridView в asp.net

person Duke Hall    schedule 10.11.2011
comment
Где вы подключаете это событие? RadGridView для WPF не имеет события ItemDataBound - person Rachel; 10.11.2011
comment
Видел ваше редактирование... Я ищу решение для WPF GridView от Telerik, а не для их ASP.Net GridView - person Rachel; 10.11.2011

Создайте новое логическое свойство в своей коллекции привязок bool: Visible{ge;set;}

Поместите в gridview и готово.

​<telerik:RadGridView.FilterDescriptors>
 <data:CompositeFilterDescriptor LogicalOperator="Or">
 <data:CompositeFilterDescriptor.FilterDescriptors>
 <data:FilterDescriptor Member="Visible" Operator="IsEqualTo" Value="True" />
 </data:CompositeFilterDescriptor.FilterDescriptors>
 </data:CompositeFilterDescriptor>
 </telerik:RadGridView.FilterDescriptors>
person user1551704    schedule 07.08.2014
comment
Как я сказал в моем ответе здесь, фильтрация результирующего набора делает совокупные итоги неправильными, поэтому для меня это не вариант. . - person Rachel; 07.08.2014