質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

820閲覧

datagridのItemSourceに、3次元のlistデータを渡す方法について

cesolution

総合スコア217

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/02/24 23:29

編集2019/02/25 05:24

前提・実現したいこと

現在、あるテキストデータを読み取って、WPF上にデータテーブルとして表示しようとしております。

現在の構成

datagridはxamlファイル側で、名前をdgexとして定義しています。

クラスの宣言とリストの宣言

public class ex { public string A { get; set; } public string B { get; set; } public List<String> C { get; set; } } List<ex> exl = new List<ex>();

xmlを読み取り、上記で宣言したex1に受け渡し→datagrid:dgexのItemsSourceに受け渡し

for(i=0;i<N;i++) { a1=xml.a; b1=xml.b; for(j=0;j<countN;j++) { cc.Add(xml.c[j]); } exl.Add(new ex {A=a1, B= b1, C=cc}); } dgex.ItemsSource = exl;

問題点

上記のように宣言すると、A,Bは正しく値が表示されますが、Cの部分が、(コレクション)となってしまいます。
xmlから読み取るcの数が予め決まっていれば、クラスの宣言をListではなく、c1、c2、、、ciといった形で、決まった数だけ宣言してやれば、上手く表示できるのですが、cの数が、読み取るxmlのタイプによって異なるため、上記のような試し方を行いましたが、上手くゆきませんでした。

以下のようなイメージの出力としたいと考えています。
イメージ説明

プログラミングに慣れておらず、様々なHP等から、データテーブルの表示方法の流れとして、クラス宣言→リスト宣言→datagridに渡すという流れしか知らないため、今回のような事例に対してはそもそものアプローチが間違っているのかもしれませんが、皆様のお知恵をお借りできれ大変助かります。

宜しくお願いいたします。

補足情報(FW/ツールのバージョンなど)

visual studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2019/02/25 01:33

具体的にどのような表示にしたいのか、画像やXAMLなどで提示してください。
cesolution

2019/02/25 05:24

ご連絡ありがとうございます。表示のイメージを画像でアップいたしました。
guest

回答2

0

ベストアンサー

こんにちは!
リストCを単純に行としたいのであれば平坦化してやれば表示はできます。
もし、平坦化せずに1行にCのリストを表示させたければDataGridのDataGridTemplateColumnを使って
入れ子表示にすることもできますが、とりあえず前者について記載。
XMLの構造が質問内容から読み取れないので参考までに。

このような出力を想定した場合

ABC
A1B1C1-1
A1B1C1-2
A1B1C1-3
A1B2C2-1
A3B1C3-1
A3B1C3-2
```C#
public class ex
{
public string A { get; set; }
public string B { get; set; }
public String C { get; set; }
}
List<ex> exl = new List<ex>();
```
```C#
a1=xml.a;
b1=xml.b;
xml.c.select(x => new {A=a1, B= b1, C = x})
```

投稿2019/02/25 04:53

mikupedia

総合スコア159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cesolution

2019/02/25 05:22

mikupedia様、私の言葉にできなかった部分を汲み取ってご提示いただきましてありがとうございます。 私のやりたいことは「平坦化せずに1行にCのリストを表示させたい」ということになるかと思いますが、ご提案いただきましたDataGridTemplateColumnを勉強して、検討してみたいと思います。素晴らしいご回答をありがとうございました。
Zuishin

2019/02/25 06:38

表の形が質問と違いますがこんなのよく読みとれましたね。
Zuishin

2019/02/25 06:55

感心したんですよ。皮肉が混ざっているように感じられたとしたらそれは質問者に対するものです。
cesolution

2019/02/25 09:11

Zuishin様、分かりにくい質問の仕方で申し訳ございませんでした。 mikupedia様、重ね重ね御礼申し上げます。
guest

0

DataTable を使うのが一番手軽かもしれません。

CSVファイルを読み込んでDataGridに表示

なお、リンク先はほとんど読んでいませんので、自分のしたいことと合致しているかどうか、情報が間違っていないかどうかは自分で確かめてみてください。

投稿2019/02/25 01:39

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cesolution

2019/02/25 05:23

ご提案ありがとうございます。ご紹介いただいたリンクも時間を見て勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問