【问题标题】:Add a single row containing text taking up entire area of WPF Datagrid添加包含占据整个 WPF Datagrid 区域的文本的单行
【发布时间】:2012-09-05 12:44:33
【问题描述】:

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

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

我正在努力解决的主要问题是以编程方式将行添加到数据网格中。

这是可能的还是有更简单的方法来做到这一点?

【问题讨论】:

    标签: c# wpf wpfdatagrid


    【解决方案1】:

    将“未找到记录”消息放在TextBlock 中,并根据DataGrid 是否有数据来显示/隐藏TextBlock

    <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;
        }
    
    }
    

    【讨论】:

    • 是的。 DataGrid和TextBlock都在一个Grid中,TextBlock Horizo​​ntalAlignment和VerticalAlignment都是Center,这样TextBlock就会显示在中心,覆盖在DataGrid之上。
    【解决方案2】:

    您可以像这样以编程方式将项目添加到数据网格:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2022-10-06
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多