添加包含文本的单行占用WPF Datagrid的整个区域

时间:2012-09-05 12:44:34

标签: c# wpf wpfdatagrid

我有一个WPF数据网格,我想在Datagrid中间显示一条消息“找不到记录”。

我可以看到这样做的一种方法是添加一个跨越所有列的数据行,其中height是数据网格的高度,然后将文本居中放在行中。

我挣扎的主要事情是以编程方式将行添加到数据网格中。

这可能或者有更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以像以下那样以编程方式向datagrid添加项目:

myDataGrid.Items.Add(new MyDataGridItem());

如果您已将datagrid的ItemsSource设置为某个集合或其他内容,则需要修改该集合。你可以这样做:

myCollection.Add(new MyDataGridItem());
myDataGrid.ItemsSource = null;
myDataGrid.ItemsSource = myCollection;

答案 1 :(得分:1)

TextBlock中添加“未找到记录”消息,并显示/隐藏TextBlock,具体取决于DataGrid是否包含数据。

<Grid>

  <DataGrid x:Name="_dataGrid" />

  <TextBlock 
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Visibility="{Binding ElementName=_dataGrid, Path=HasItems, Converter={StaticResource BooleanToInverseVisibilityConverter}, Mode=OneWay}">
      No Records Found
  </TextBlock>

</Grid>

编辑:BooleanToInverseVisibilityConverter的来源(我的WPF项目中有一些像我这样的便捷转换器)

public class BooleanToInverseVisibilityConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        return (bool) value ? Visibility.Collapsed : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        return null;
    }

}