当它为空时,在WPF DataGrid上显示“找不到记录”消息

问题描述 投票:12回答:4

如果没有可用的记录,我想在标题下面的数据网格上添加一个TextBlock,显示消息“No Record Found”。

请考虑附图以供参考。

wpf xaml wpfdatagrid
4个回答
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 =“True”。请定义列。这样,当绑定空数据源时,列名称将与“空行”消息一起显示。


6
投票

最后,我能够找到方法。

  1. 当网格为空时,在网格上添加默认行
  2. 创建一个RowDetailTemplate,其中包含一个带有“No Record Found”消息的文本块 <DataGrid.RowDetailsTemplate> <DataTemplate> <StackPanel> <TextBlock Text="No Record Found" Width="400"></TextBlock> </StackPanel> </DataTemplate> </DataGrid.RowDetailsTemplate>
  3. 在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步添加的默认行。


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>

1
投票
  1. 在stackpanel内添加网格
  2. 放在datagrid旁边的边框代码下面
<Border HorizontalAlignment="Stretch" VerticalAlignment="Center" 
        BorderThickness="1,0,1,1" BorderBrush="Black" Height="35">
    <Border.Style> 
        <Style TargetType="Border">
            <Setter Property="Visibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding YourListName.Count}" Value="0">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style> 
    </Border.Style> 
    <TextBlock Text="No record fount" HorizontalAlignment="Center"
               VerticalAlignment="Center" /> 
</Border>

它将根据您的收藏/列表计数显示/隐藏。

© www.soinside.com 2019 - 2024. All rights reserved.