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

时间:2011-01-14 02:23:53

标签: wpf xaml wpfdatagrid

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

考虑附加图像以供参考。alt text

3 个答案:

答案 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)

最后我能找到方法。

  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>
    
  4. 默认情况下(数据网格上可用的记录)行详细信息模板将被折叠。

    检查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>