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

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

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

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

Q&A

解決済

2回答

4910閲覧

C# Tabledataの結合

g1mkt

総合スコア15

C#

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

0グッド

1クリップ

投稿2016/12/12 15:57

編集2016/12/12 15:58

データベースから持ってきたテーブル2つを結合し、
DataGridViewに表示させたいです。
DataGridViewと、PersonJobTableのName,Jobはバインドさせます。
バインドは、デザインビューから行いました。
以下はイメージ図です。

イメージ説明

初期は、
DataTable PersonTb,JobTb,PersonJobTable
を準備し、
SQL、Fill でPersonTb,JobTbのテーブルにデータを格納します。
その後、SQLでPersonTb,JobTbを結合し、PersonJobTableへ格納しようと思いました。
しかし、SQLを使用せずにやってみたいと思い調べましたら、
DataSetクラスして、SQLでデータセットしてそこから、table指定して~~
というやり方でした。

そこで質問なのですが、DataSetを使用せずに結合するやり方をご教授下さると幸いです。

取り急ぎ、文のみの質問で申し訳ございませんが、宜しくお願い致します。

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

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

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

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

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

KSwordOfHaste

2016/12/12 17:42

「DataSetクラスして」では意味が通じません。意味が分かる文章にしてください。適切な表現がわからなければ具体的なコードを記載した方が早いと思います。
guest

回答2

0

ベストアンサー

そこで質問なのですが、DataSetを使用せずに結合するやり方をご教授下さると幸いです。

その意味が分かりませんが、今回のようなケースで普通に考え付くのは、TableAdpter 構成ウィザードで以下のように JOIN した SELECT クエリをベースに型付 DataSet + TableAdapter を作るということです。

【2016/12/15 9:55 誤記訂正:PersonJobTable ⇒ PersonTable】

SELECT PersonTable.ID, PersonTable.Name, JobTable.Job FROM PersonTable INNER JOIN JobTable ON PersonTable.JobID = JobTable.ID

それができれば、あとは自力でコードを一行も書かなくても、Visual Studio のウィザードを使ってのドラッグ&ドロップで DataGridView を使った Windows Forms アプリを作れます。

見るだけならそれで十分と思いますが、テーブルを JOIN した SELECT クエリをベースに TableAdapter を自動生成させると UPDATE, DELETE, INSERT に必要なコードは一切自動生成されないので、更新操作が必要な場合困ると思います。

DataGridView を操作して DB の更新を可能にする必要があるのでしたら、以下の方法があります。

DataGridView に ComboBox を表示
http://surferonwww.info/BlogEngine/post/2014/01/23/how-to-show-combobox-column-in-datagridview.aspx

DataGridView に ID と名前を併記
http://surferonwww.info/BlogEngine/post/2014/02/01/how-to-show-both-id-and-name-on-datagridview-while-enabling-update.aspx

なお、上記の記事の方法では PersonTable テーブルのみしか更新できません。PersonTable テーブルと JobTable テーブルの両方を同時に更新したい場合は TableAdapterManager クラス(Visual Studio 2008 以降)を利用して階層更新を行う必要があると思います。詳しくは以下の記事を見てください。

TableAdapterManager
http://surferonwww.info/BlogEngine/post/2011/12/21/TableAdapterManager.aspx

投稿2016/12/14 01:12

編集2016/12/15 00:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

DataGridView の名前が dataGridView1 で
personTb と jobTb が型付きデータテーブルのインスタンスだとするとこんな感じで

dataGridView1.DataSource = personTb.Join( jobTb, o => o.JobID, i => i.ID, (o, i) => new { o.ID, o.Name, i.Job }).ToList();

DataSetやDataTableはとても不便です。
これから学ぶなら Entity Framework をお勧めします。
Windows.Forms も更新が止まって久しく、せっかく覚えても学習コストが無駄になる恐れがあります。
WPF や、UWP は最近の流行りの方法で構築しますので潰しが利きやすいです。

投稿2016/12/13 08:52

hihijiji

総合スコア4150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問