如果没有可用的记录,我想在标题下面的数据网格上添加TextBlock
,显示消息“找不到记录”。
考虑附加图像以供参考。
答案 0 :(得分:15)
自问题发布以来已经很长时间了。但我认为这可能对其他人有用。
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
<DataGrid Name="dgProjects" ItemsSource="{Binding Projects}" AutoGenerateColumns="True" />
<TextBlock Text="Employee has no projects" Visibility="{Binding Items.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=dgProjects}" />
为简单起见,我设置了AutoGenerateColumns =&#34; True&#34;。请定义列。这样,当绑定空数据源时,列名称将与“空行”一起显示。消息。
答案 1 :(得分:5)
最后我能找到方法。
创建一个RowDetailTemplate,其中包含一个带有“No Record Found”消息的文本块
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="No Record Found" Width="400"></TextBlock>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
在datagrid上设置样式
<DataGrid.Style>
<Style TargetType="DataGrid">
<Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsRecordExists,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type local:MainWindow}}}" Value="false">
<Setter Property="RowHeight" Value="0"></Setter>
<Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
默认情况下(数据网格上可用的记录)行详细信息模板将被折叠。
检查CLR属性的DataTrigger,如果为false,则显示行详细信息模板。
将rowheight设置为0以隐藏我们在第1步添加的默认行的原因。
答案 2 :(得分:5)
我发现很容易将文本块放在网格上,并根据行数设置其可见性。我通常使用MVVM并将可见性绑定到View Model属性:
<Grid>
<toolkit:DataGrid>
<toolkit:DataGrid.Columns>
.
.
.
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
<TextBlock Text="No Records Found" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding EmptyMessageVisibility, Mode=OneWay, FallbackValue=Visible}" />
</Grid>