私は数日間このことに固執していますが、自分で解決策を見つけることはできません。 ItemsSourceとしてList<Plants>
のDataGridを入力しようとしています。複数のレイヤーを持つListでいっぱいのC#DataGrid
"Type1, \n Type2, \n ..."
:問題は、タイプPlant
私はいるICollection内の各項目は、このような新しい行にある文字列としてデータグリッドの対応する列に表示する必要のあるタイプICollection<PlantType>
の部材を有しています私は単純化されたコードをここに示します(コード全体をコピーするとそれは少し過度になります)。 PlantType
がType
カラム(Plant
ない)を有すること
public partial class Plants
{
public Plants()
{
PlantType = new HashSet<PlantType>();
}
public int ID { get; set; }
public string Name { get; set; }
public int Page { get; set; }
public virtual ICollection<PlantType> PlantType { get; set; }
}
注。今、私はこの情報をデータグリッドを埋めるためにしたいので、理想的には次のようになります:現時点では
-----------------------------------------
| Name | Page | Type |
|---------------------------------------|
| plant1 | 3 | supporting |
|---------------------------------------|
| pla2 | 13 | not-supporting |
|---------------------------------------|
| | | test |
|---------------------------------------|
| | | also this type |
|---------------------------------------|
| | | type |
|---------------------------------------|
| plantZ | 40 | test |
-----------------------------------------
問題であるものはHashSetsないので、それが唯一の名前とページ(に記入し、したがって、明確な)。これは、データグリッドを埋めるための私のコードがどのように見えるかです:私は物事を試してみたが、アイデアやGoogle検索用語が不足している
private void BuildDataGridContent(List<Plants> lList)
{
dataGrid.IsReadOnly = true;
dataGrid.AutoGenerateColumns = false;
dataGrid.ItemsSource = lList;
DataGridTextColumn textColumn1 = new DataGridTextColumn();
DataGridTextColumn textColumn2 = new DataGridTextColumn();
DataGridTextColumn textColumn3 = new DataGridTextColumn();
textColumn1.Header = "Name";
textColumn1.Binding = new Binding("Name");
textColumn2.Header = "Page";
textColumn2.Binding = new Binding("Page");
textColumn3.Header = "Type";
textColumn3.Binding = new Binding("Type"); // <-- the problem is here. It can't directly access lList.PlantType.Type (PlantType = Table name; Type = column name in the SQL DB)
dataGrid.Columns.Add(textColumn1);
dataGrid.Columns.Add(textColumn2);
dataGrid.Columns.Add(textColumn3);
}
。誰かが私が正しくこのようにカラムにType
を縛る方法を教えてもらえますか?
あなたが望むビューのあなたの例は少し不明です。それぞれの 'Plant'インスタンスの行に、' ICollection 'のそれぞれの' PlantType'インスタンスの行が続くはずですか? –
blins
ええ、それは少し不明です、申し訳ありません。つまり、タイプは最初のプラントと同じ行に表示されますが、カンマと改行で区切られます。 "test"の例では、 "このタイプ"と "タイプ"も "サポートしていない"と同じ行にあります(すべてが名前の一部です:pla2)。 さらに明確にするために:Plantname |ページ| planttype(リストは一度に複数あることがあるので) – Vitriol
'Name'と' Page'と同じプロパティとともにstring型の 'Type'のようなプロパティを持つ' PlantViewModel'クラスを作成します。次に、 'Plant'を' PlantViewModel'にマップし、最後にPlantViewModelsにバインドするだけです。 – blins