
はじめまして、現在C#を学習しているものです。
開発環境
・VS Express 2017 for Windows Desktop
・MariaDB 10.6
・mysql-connector-net-8.0.27
タイトルの通りですが、下記コードですと目的の一覧が表示されます。
C#
1 public void LoadData() 2 { 3 try 4 { 5 MySqlConnection dbConnection = ClassDatabase.DbConnect(); 6 DataTable dt = new DataTable(); 7 MySqlDataAdapter mysqlAdp = new MySqlDataAdapter("SELECT * FROM 明細", dbConnection); 8 mysqlAdp.Fill(dt); 9 this.dgv.DataSource = dt; 10 dgv.Columns[0].Visible = false 11 dgv.Columns[3].Visible = false; 12 dgv.Columns[7].Visible = false; 13 dbConnection.Close(); 14 } 15 catch (MySqlException mse) 16 { 17 MessageBox.Show(mse.Message, "データ取得エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); 18 } 19 }
一覧をforeachで表示させたいのですが、どのように書いたらよいでしょうか?
雰囲気としてはこのような感じですか?
C#
1 public void LoadData() 2 { 3 try 4 { 5 MySqlConnection dbConnection = ClassDatabase.DbConnect(); 6 DataTable dt = new DataTable(); 7 MySqlDataAdapter mysqlAdp = new MySqlDataAdapter("SELECT * FROM 明細", dbConnection); 8 9 foreach (DataRow dr in dt.Rows) 10 { 11 dgv.Rows.Add(dr); 12 } 13 14 dbConnection.Close(); 15 } 16 catch (MySqlException mse) 17 { 18 MessageBox.Show(mse.Message, "データ取得エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); 19 } 20 }
以上、ご教示頂けますと幸いです。宜しくお願い致します。

開発環境(Visual Studio, MySQL, Connector/NET のバージョンなど)を質問欄を編集して追記してください。
> 一覧をforeachで表示させたいのですが、どのように書いたらよいでしょうか?
普通はそんなことをすることはあり得ないくて、あなたが最初にやったように DataTable 取得して DataGridView にバインドする以外はないと思うのですが、それでもやりたい理由は何ですか?
ご指摘頂きありがとうございます。
Connector/NETに関してよく理解していないのですが、mysql-connector-net-8.0.27ということでしょうか?

Connector/NET というのは Oracle 製品ですが、mysql-connector-net-8.0.27 は同じものですか?
https://dev.mysql.com/downloads/connector/net/
MySql.Data.dll v8.0.27 を使っていればたぶん同じと思いますが(細かいことを言うと GAC やレジストリに登録されたりするところが違うかもしれませんが、そこは今回の話とは関係なさそうなので気にしなくて良さそう)
こちらの質問にも答えてください。
> 一覧をforeachで表示させたいのですが、どのように書いたらよいでしょうか?
普通はそんなことをすることはあり得ないくて、あなたが最初にやったように DataTable 取得して DataGridView にバインドする以外はないと思うのですが、それでもやりたい理由は何ですか?
すみません詳しいことは分からないです。。
> 普通はそんなことをすることはあり得ないくて、あなたが最初にやったように DataTable 取得して DataGridView にバインドする以外はないと思うのですが、それでもやりたい理由は何ですか?
簡単に言いますと課題のようなものです。今後、foreachでDataGridViewに表示をする必要があるとご指摘を受けましたので、その課題をこなすため学習していた所存です。

今思い出したのですが、以前、MariaDB の char-set がデフォルトで utf8mb3 で、それを C# アプリで ADO.NET + Oracle 製プロバイダ (Connector/NET) を利用して使おうとしたら、その Connector/NET が utf8mb3 をサポートしてなかったという話がありました。
https://teratail.com/questions/371949
Oracle 製の MySQL, MySQL for Visual Studio, Connector/NET を一式 Oracle のインストーラーを使ってインストールして使った方が、相性の問題に悩まなくて済むかもしれません。

> 簡単に言いますと課題のようなものです。
普通やらないこと(はっきり言ってあまり意味がなさそうなこと)を考えるのはちょっとアレなので、深くは考えてないですが・・・
例えば、
データソース ⇒ BindingSource ⇒ DataGridView
という構成にして、foreach で BindingSource に 1 レコードずつ追加していくとか?
その問題私も経験しました。環境は準備して頂いたものを利用していたのですがそういうことだったんですね。勉強になりました、ありがとうございます。
正直に言いますと調べてもなかなか解決できず、変える必要があるのかな?と思いましたが上司のお言葉でしたので。。
了解致しました、少し時間がかかるかもしれませんがやってみます。ご教示頂きありがとうございます。

> foreachでDataGridViewに表示をする必要がある
どういうケースなんだろう…
DataSourceにDataTableをバインドしてあれば、DataTable側の行を増やせば、DataGridViewの行も増えますが。

> 上司のお言葉でしたので。。
どういうシナリオでそういうことをするのかなど上司の方の意図を確認することをお勧めします。データを取得するのに時間がかかるが全部取得するのを待ってられないから取得できた毎に順次表示していくとかのシナリオがあるのかも。
> 上司のお言葉でしたので。。
悪いケースだと、発言した当事者自身が分かっていない場合もあります。「〜でできるんじゃないの?知らんけど。」くらいの軽いアドバイスだったりするので、鵜呑みにはできません。ましてやこのような場で第三者には判断できません。

「一覧をforeachで表示」というのは結局どういうことがしたいのでしょう、上司の方の意向とか分かりましたか? 自分で立てたスレッドはクローズするまでフォロー願います。

回答1件
あなたの回答
tips
プレビュー