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

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

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

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

WPF

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

Q&A

解決済

1回答

10128閲覧

C# データベースからSELECTした内容をDataGridの列に当てはめる

---stax---

総合スコア148

C#

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

WPF

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

0グッド

0クリップ

投稿2017/10/11 14:16

編集2017/10/11 14:22

表題の件で質問お願い致します。
WPFの画面上にあるDateGridにデータベースから取得したデータを表示させたいのですが
列数の少ないテーブルに関してはすべてのデータや一部のデータを取得させる、ということは出来ました
今回は列名には、あるテーブルのレコード分表示させたいと考えています
列数の少ないテーブルを表示させたときは手書きで
dt.Columns.Add("〇〇");
のように複数列名を書いていたのですが
今回列名に指定したいデータは90個近くあり手書きではなく、列名に指定したいデータをSELECTで取ってきて、自動で横軸に当てはめたいと考えています

DataTable tb1 = new DataTable();
var command1 = new NpgsqlCommand("select st_num from lesson1.person", conn);
var dataReader1 = command.ExecuteReader();

というコードを追加して、ほしい列名のデータはdataReader1に入れることは出来たのですが
行としては表示できても列として表示することができません
列名をデータベースから取ってきた値を当てはめる方法についてアドバイスいただきたいです

分かりにくい説明で申し訳ありません
よろしくお願いします

以下、グリッドにテーブルのデータを表示させるコードの抜粋です
これを応用できるのかなと考えました

C#
public partial class MainWindow : Window
{

public MainWindow() { DataTable tb = new DataTable(); //DataTableのインスタンスtbを定義 tb.Columns.Add("name"); //DataTableのインスタンスtbにnameという列を挿入 InitializeComponent(); var connString = "Server=cpedev27;Port=5432;User Id=test_user;Password=test_user;Database=test_server;"; var conn = new NpgsqlConnection(connString); conn.Open(); var command = new NpgsqlCommand("select name from lesson2.person", conn); var dataReader = command.ExecuteReader(); while (dataReader.Read()) { var row = tb.NewRow(); for (int i = 0; i < dataReader.FieldCount; i++) { row["name"] = dataReader["name"]; // dataReader["name"]はDBからとってくるデータの為名前は欲しい列と一致させる } tb.Rows.Add(row); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

DataAdapter.Fill メソッドを使ってみる

.NETライブラリ「Npgsql」によるPostgreSQLの活用

using (var conn = new NpgsqlConnection(connString)) { conn.Open(); var dataAdapter = new NpgsqlDataAdapter(@"select * from table_name", conn); var dataSet = new DataSet(); dataAdapter.Fill(dataSet); }

あとはこのDataSetのTableとDataGridをデータバインドするだけで、やりたいことが実現するのでは?

投稿2017/10/11 22:37

dojikko

総合スコア3939

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

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

---stax---

2017/10/12 05:58

回答ありがとうございます 以下のように var dataReader1 = coma.ExecuteReader(); で取得したデータをstring型の配列に入れなおし、 table.Columns.Add(a);で追加することで実現できました バインドに関してはまだまだ理解が出来ていないので直接書く方法で行いました DataTable table = new DataTable(); var coma = new NpgsqlCommand("select dsp_num from kado_sys.st_mstr order by dsp_num ASC;", conn); var dataReader1 = coma.ExecuteReader(); var row = table.NewRow(); while (dataReader1.Read()) { for (int u = 0; u<dataReader1.FieldCount; u++) { var a = dataReader1[u].ToString(); table.Columns.Add(a); } } table.Rows.Add(row); this.DataContext = table;
283cks

2017/10/12 08:54

コードも気になりますが、xaml部分をどう書いておられるのかも 気になるので、記載しておいたほうがいいかなと思います。 最初のコードの書き方だと、おそらくですが ~.xaml.cs ファイルに書かれているのかな? MVVMじゃない。。。 (まあ私も書き方はしっかり分かっているか? と問われると困りますが) MVVMに関してはネットで探すぐらいしかない (日本の書籍ではない?あったら知りたい。) ので、MVVMは後々のためにも学んでおくべきかと思います。
---stax---

2017/10/15 14:42

回答ありがとうございます。 返信遅くなり申し訳ありません。 ご指摘の通りxaml.csに全て書いているのでWPFである意味が無い状態です…。 コードを書くという事にまだまだ慣れていないのでまずは一旦形にして、その後で分ける方法にしようかと考えています。(かなり遠回りな上に変な癖が付くかもしれないので良くないかもしれませんが…) 書籍は無いのですね。 MVVMはとても難しい印象があります…。 いくつかネットでもサイトを見つけたので今後活用していくためにも勉強させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問