如何在 WPF 数据网格中显示 N 个项目?

Posted

技术标签:

【中文标题】如何在 WPF 数据网格中显示 N 个项目?【英文标题】:How to show N items in a WPF data grid? 【发布时间】:2021-06-16 18:48:27 【问题描述】:

对于我正在使用的窗口宽度:

SizeToContent="Width"

但是对于身高,我是手动硬编码的。但是如何才能让窗口显示最多 N 个数据网格项呢?

所以如果超过 20 个项目,只显示其中的 20 个,如果少于则显示所有项目。

【问题讨论】:

您是否希望将所有项目加载到网格中,例如,当您对其进行排序时,您会看到前 20 个项目,或者您只想拥有最初的 20 个项目并使用它们? 这是.Take(20) 的问题吗?还是在寻找寻呼机? 我想要加载所有项目,因为我最多有 50-60 个,所以不是很多。但我想让我的窗口调整大小以在数据网格视图中显示最多 20 个项目(带滚动条)。如果它小于 20,窗口也应该在启动和运行时调整大小,所以如果我在我正在做的代码中删除或添加一个项目,那么窗口应该应用上面相同的逻辑并适当地调整大小。 因此,只需调整我的数据网格视图的大小以显示 20 个或更少的项目(带有滚动条)并根据此调整窗口大小。我的应用只包含这个单一的数据网格视图。 我认为这个问题和另一个问题很相似***.com/questions/10227218/… 【参考方案1】:

只需在窗口上使用SizeToContent="WidthAndHeight" MaxHeight="400",并使用适当的MaxHeight 值,以便DataGrid 中只有20 个项目可见。

这样所有项目都将被加载,如果项目超过 20 个,将显示滚动条,并且窗口将针对任何较少数量的项目正确调整大小。根据您上面的评论,我认为您正在努力实现这一目标。

当然,如果窗口仍需要手动完全调整大小,此解决方案将不起作用。

编辑

由于上述建议无法应用,这里还有一个...

因此,根据所有信息,如果我不能或不想使用分页,我会这样做:

MainWindow.xaml

<Window ...     
        Title="MainWindow"
        SizeToContent="WidthAndHeight">
    <Grid>        
        <DataGrid Name="dataGrid" />        
    </Grid>
</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
   
    // Total number of items
    private int dataCount = 0;

    ...

    private void AddDataToGrid(SomeData data)
    
        // Update item counter
        dataCount += 1;
        // Auto size if now there are 20 or less items, otherwise do not change size
        this.SizeToContent = dataCount <= 20 ? SizeToContent.WidthAndHeight : SizeToContent.Width;

        // Update grid data
        this.dataGrid.Items.Add(data);
    

    private void RemoveDataFromGrid(SomeData data)
    
        // Update item counter
        dataCount -= 1;
        // Auto size if now there are 20 or less items, otherwise do not change size
        this.SizeToContent = dataCount <= 20 ? SizeToContent.WidthAndHeight : SizeToContent.Width;

        // Update grid data
        this.dataGrid.Items.Remove(data);
       

基本上,我会添加用于添加或删除DataGrid 项目的方法,然后每次检查项目总数,并在需要时通过将SizeToContent 值设置为WidthAndHeight 使窗口的高度适合内容或Width

【讨论】:

谢谢,但我无法对值进行编码。因为我不知道实际的行高。此外,当项目少于 20 个时,它只需要显示那些调整了窗口大小的项目,因此您需要知道运行时的实际行高。 @JoanVenge 如果是这样,我已经用不同的可能解决方案更新了我的答案。 谢谢,但这只会调整窗口大小,不是吗?我需要调整数据网格的大小以仅显示 N 个项目。 对不起,我不确定我是否理解,您在写其他 cmets 中的窗口大小调整...无论如何,在我发布的示例中,窗口将遵循数据网格的大小,直到项目数超过 20,在这种情况下,窗口将保持相同大小,但数据网格会出现滚动条。 谢谢 我会试试这个,但我不明白你是如何使用硬编码的高度值 400 的?基本上我需要数据网格总是在 20 行的高度,或者更少,不超过 20。但是我需要程序来计算或使用实际显示的行高,因为如果我没有错 WPF 只知道这一点在运行时不是编译时。想象多台计算机,每台计算机都使用不同的分辨率和 hidpi 设置。我不想为每个实例使用不同的硬编码高度值。

以上是关于如何在 WPF 数据网格中显示 N 个项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF 中更改数据网格标题样式或元素样式前景

在 WPF 中,如何将数据网格列绑定到数据表的特定列?

如何在 wpf 中将新行添加到数据网格中?

如何使用一种方法在网格 C# WPF 中添加行 [重复]

如何在自定义 wpf 控件上绑定数据网格列的可见性?

如何在C#中将列表与WPF数据网格绑定?