我有一个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太多了,因为我可以隐藏数千条记录,这会在屏幕上留下一个巨大的白色区域。
答案 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