【问题标题】:How to minimize a group of rows in a DataGridView so they take up less space?如何最小化 DataGridView 中的一组行以减少它们占用的空间?
【发布时间】:2024-01-06 20:02:02
【问题描述】:

我的DataGridView 有一个问题,因为有很多重复或非常相似的数据,一旦开始有数百行,它就会变得非常笨拙。

我四处寻找一些允许分组的自定义控件,但我发现这些控件要么花钱,要么太旧,要么太复杂而不能保证为这件事切换,或者不适用于我现有的代码库(不兼容的类型,等等)

最好我可以使用普通的DataGridView 来做到这一点。我想要一个菜单​​项按钮,单击该按钮时,会获取选定的行并将它们变成一行(同时保留数据并提供某种行被压缩的视觉提示)。再次单击时,该行将被恢复。

有没有人知道一个优雅的方式来完成这个?我想我可以拥有DataGridViewRows 集合中的List 以及一些保存相应索引或类似内容的方法,但我想知道是否有更好的方法来做到这一点。

【问题讨论】:

  • 您是否考虑过您向用户展示的内容?是否可以呈现更少的数据?
  • @BryanCrosby:是的,这就是我想要做的,但允许折叠选定的行。不,我不能随时修改数据。

标签: c# datagrid datagridview grouping


【解决方案1】:

由于您不想使用 3rd 方控件或自定义控件,因此穷人的解决方案很简单。

假设您的数据如下所示:

public class CustomData
{
    public int Id { get; set; }
    public string Type { get; set; }
    public string Name { get; set; }
}

您可能向用户显示的内容可能是这样的:

List<CustomData> data = new List<CustomData>()
                                        {
                                            new CustomData { Id = 1, Name = "Test", Type = "Group1"},
                                            new CustomData { Id = 2, Name = "Test", Type = "Group1"},
                                            new CustomData { Id = 3, Name = "Test", Type = "Group1"},
                                            new CustomData { Id = 4, Name = "Test", Type = "Group2"},
                                            new CustomData { Id = 5, Name = "Test", Type = "Group2"},
                                            new CustomData { Id = 6, Name = "Test", Type = "Group2"},
                                            new CustomData { Id = 7, Name = "Test", Type = "Group3"},
                                            new CustomData { Id = 8, Name = "Test", Type = "Group3"},
                                            new CustomData { Id = 9, Name = "Test", Type = "Group3"},
                                        };
var dataDisplayedToUser = data.GroupBy(g => g.Type).Select(p => p.Key);

在这种情况下是:

Group1
Group2
Group3

当用户想要双击网格中的一行时,您可以简单地向他们展示另一个模态数据网格,其中包含以下数据子集。

string dataValue = theGroupTheUserSelected // from your grid
var specificData = data.Where(f => f.Type == theGroupTheUserSelected);

您最终会向用户显示更少的数据,这更容易看,也更容易理解。

【讨论】:

    最近更新 更多