如何在Telerik的GridView中隐藏行?

时间:2011-11-10 15:41:41

标签: wpf telerik radgridview

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

我认为根据行的数据编写触发器并隐藏行很容易,但事实证明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,从Telerik的GridViewVirtualizingPanel中删除Item,并调整Visibility,但这些选项似乎都不起作用。

有谁知道我可以做到这一点的方法?我想要根据触发器隐藏(和折叠)行,或者找到一种方法来获取当前Grouped Expression的查询,这样我就可以查询第二个集合并在Group Total中显示结果。使用Code-Behind或者hackish来实现这一点我没有问题。

修改

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

3 个答案:

答案 0 :(得分:2)

我也发布了a question on Telerik's forums,显然这是不可能的。我的选择是过滤结果集,或将行的高度设置为1。

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

我的最终解决方案是将分组行的行高设置为1,并显示未分组的项目。这意味着所有项目都显示数据是否已取消分组,但在分组时,有一条1px的白线,几乎不会显示在隐藏项目所在的网格中。

答案 1 :(得分:1)

在绑定集合中创建新的布尔属性 bool:可见{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>

答案 2 :(得分:0)

如果你可以在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