7

私は

List<DetailObject> someList;

これは次のようになります:

    public class DetailObject
    {
        public string Titel { get; set; }
        public int Value1 { get; set; }
        public int Value2 { get; set; }
        public int Value3 { get; set; }
    }

(DataGrid.AutoGenerateColumns = "True"を使用して)'string Titel'の値をRowHeaderとして使用し、他のメンバーを "Row" Contentとして使用する方法を知っている人はいますか?変更を加えないと、ColumnHeaderとして「Titel」、行としてTitelの値、ColumnHeaderとして「Value1」のdito、RowsとしてValue1の値などが表示されます。

助けてくれてありがとう!

乾杯

編集:より良い理解のために、これは私が持っているものです

[Titel]       [Value1]       [Value2]       [Value3]
[Item1.Titel] [Item1.Value1] [Item1.Value2] [Item1.Value3] 
[Item2.Titel] [Item2.Value1] [Item2.Value2] [Item2.Value3] 
[Item3.Titel] [Item3.Value1] [Item3.Value2] [Item3.Value3] 

これが私が探しているものです:

[Item1.Titel]  [Item2.Titel]  [Item3.Titel] 
[Item1.Value1] [Item2.Value1] [Item3.Value1]
[Item1.Value2] [Item2.Value2] [Item3.Value2]
[Item1.Value3] [Item2.Value3] [Item3.Value3]

EDIT2:私はここでも素晴らしいアプローチを見つけました:http: //codemaverick.blogspot.com/2008/02/transpose-datagrid-or-gridview-by.html

4

4 に答える 4

5

このスレッドは少し古いですが、誰かがまだ興味を持っているかもしれません...私はWPF DataGridを転置する方法も探していましたが、最終的にCodePlexで次のオープンソースプロジェクトを見つけました。

転置されたWPFDataGrid

お役に立てれば。

于 2012-07-13T13:26:17.647 に答える
4

RowHeaderTemplate次のように使用できます。

<toolkit:DataGrid>
  <toolkit:DataGrid.RowHeaderTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Item.Titel, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type toolkit:DataGridRow}}}"/>
    </DataTemplate>
  </toolkit:DataGrid.RowHeaderTemplate>
</toolkit:DataGrid>

また、プロパティが列として表示されないように、独自の列を設定AutoGenerateColumnsfalseて作成する必要があります。Titel

編集

を転置したいことがわかりましたDataGrid。簡単ですが、やや「ハッキー」な解決策は、「転置された」オブジェクトのリストを作成することだと思います。これを行うには、元のリストにオブジェクトがいくつあるかを事前に知ってから、オブジェクトと同じ数のプロパティを持つ新しいクラスを作成する必要があります。

class TransposedDetailObject {
  public String Column1 { get; set; }
  public String Column2 { get; set; }
  public String Column3 { get; set; }
}

var transposedList new List<TransposedDetailObject> {
  new TransposedDetailObject {
    Column1 = someList[0].Titel,
    Column2 = someList[2].Titel,
    Column3 = someList[3].Titel
  },
  new TransposedDetailObject {
    Column1 = someList[0].Value1,
    Column2 = someList[2].Value1,
    Column3 = someList[3].Value1
  },
  ...
};

「ハッキー」ではない解決策は、のコントロールテンプレートを変更して、DataGrid行と列を入れ替えることです。ただし、DataGridこれは複雑なコントロールであり、コントロールテンプレートを変更するのは少し難しい場合があります。

于 2009-09-24T13:08:57.500 に答える
3

ビジネスオブジェクトのリストを、オブジェクトのプロパティから列を作成したデータテーブルに変換し、それをデータグリッドのアイテムソースとして設定します。編集を有効にする場合は、データテーブルを繰り返し処理し、値を手動でビジネスオブジェクトに適用する必要があります。リフレクションは、グリッドを汎用化するのに役立つ場合があります。いくつかの考え。

于 2009-10-30T22:33:26.350 に答える
1

ItemsControlよりクリーンなアプローチは、シナリオの代わりに使用することだと思いDataGridます。

このブログ投稿の指示に従い、ItemTemplate最大限の制御を行うために独自の指示を作成してください。このようにして、各列のテンプレートを作成できます(Datagrid自体にすることもできます)。

于 2013-04-23T06:39:36.707 に答える