0

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

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

最好我能用常规的DataGridView. 我想要一个菜单​​项按钮,单击该按钮时,会获取选定的行并将它们变成一行(同时保留数据并提供某种行被压缩的视觉提示)。再次单击时,该行将被恢复。

有谁知道一个优雅的方式来完成这个?我想我可以拥有一ListDataGridViewRows 和一些保存相应索引的方法或类似的东西,但我想知道是否有更好的方法来做到这一点。

4

1 回答 1

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

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

于 2012-09-28T16:39:57.333 回答