Как я могу скрыть строки в GridView Telerik? - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть 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, удалив Item из GridViewVirtualizingPanel Telerik и настроить Visibility, но ни одна из этих опций, похоже, не работает.

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

Редактировать

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

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

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

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

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

1 голос
/ 07 августа 2014

Создайте новое логическое свойство в вашей коллекции переплетов 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>
0 голосов
/ 10 ноября 2011

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

 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

...