0

DataGridView繰り返しまたは非常に類似したデータがたくさんあり、数百行になり始めると、非常に扱いにくくなるという問題があります。

グループ化を可能にするいくつかのカスタムコントロールを探しましたが、費用がかかる、古い、複雑すぎてこの1つのことを切り替えることができない、または既存のコードベースで動作しない(互換性のないタイプなど)ことがわかりました。

できれば、通常の でこれを行うことができますDataGridView。クリックすると、選択した行を取得して1つの行に変換するメニュー項目ボタンが必要です(データを保持し、行が圧縮されているという視覚的な手がかりを提供します)。もう一度クリックすると、行が復元されます。

これを達成するためのエレガントな方法を知っている人はいますか? Listのコレクションと、対応するインデックスを保存する方法、またはそのような全体的な方法を使用できると思いDataGridViewRowますが、これを行うより良い方法があるかどうか疑問に思っています。

4

1 に答える 1

1

サード パーティ製のコントロールやカスタム コントロールを使用したくないので、これに対する貧弱な人の解決策は簡単です。

データが次のようになっているとします。

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 に答える