3

我有一个 WPF GridView,部分数据需要显示在总计(页脚和组总计)中,而不是实际数据记录中。

我认为编写触发器并根据行的数据隐藏行会很容易,但事实证明 TelerikGridView使用了一个不寻常的面板进行虚拟化,所以虽然指定的行被隐藏了,但在应该的地方留下了一个空白区域去。

这是我目前的风格。它确实隐藏了行,但它相当于使可见性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,从 Telerik 的 GridViewVirtualizingPanel 中删除 Item,并调整 Visibility,但这些选项似乎都不起作用。

有谁知道我可以做到这一点的方法?我要么想基于触发器隐藏(和折叠)行,要么找到一种方法来获取当前分组表达式的查询,以便我可以查询第二个集合并在 Group Total 中显示结果。我对使用 Code-Behind 或一些 hackish 来实现这一点没有任何问题。

编辑

作为一个有趣的旁注,我可以将高度设置为 1,但不能设置为 0。即使 1 也太多了,因为我可以隐藏数千条记录,这会在屏幕上留下一个巨大的白色区域。

4

3 回答 3

2

也在 Telerik 的论坛上发布了一个问题,显然这是不可能的。我的选择是过滤结果集,或者将行的高度设置为 1。

如果我过滤结果集,我的聚合不正确。如果我将行高设置为 1,如果隐藏了很多记录(有),我仍然会得到大面积的空白。

我的最终解决方案是将分组行的行高设置为 1,并且只显示未分组的项目。这意味着如果数据未分组,所有项目都会显示,但是当分组时,有一条 1px 的白线穿过隐藏项目所在的网格几乎看不到。

于 2011-12-01T15:59:27.840 回答
1

在绑定集合中创建新的布尔属性 bool: Visible{ge;set;}

放置在gridview中并完成。

​&lt;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>
于 2014-08-07T12:53:49.560 回答
1

如果您可以在 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();
}

这是一个类似的问题/答案: Hide a gridView row in asp.net

于 2011-11-10T15:46:42.097 回答