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

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

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

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

Q&A

解決済

2回答

2331閲覧

C#_1つのボタン(次へボタン)を複数の問題に対して順に表示させたい

pomi

総合スコア10

C#

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

0グッド

0クリップ

投稿2016/11/08 07:25

*質問*
C#_1つのボタン(次へボタン)を複数の問題に対して順に表示させたい

*現状*
複数問題ボタンあり、それは各々の問題にリンクされている。
その後、次へボタン(view上に1つのみ)をクリックするとdataGridViewで次の問題が表示される仕組み。
どのようにリンクさせたらよいかわからず困っております。
ご教授頂ければ幸いです。宜しくお願い致します。

private void button1_Click_1(object sender, EventArgs e) { //問題文を呼出すSQL文 MySqlDataAdapter da = new MySqlDataAdapter( "SELECT question Q1 FROM que WHERE bang='1'", cn); DataTable dt = new DataTable(); //テーブルを呼出すSQL文 MySqlDataAdapter da2 = new MySqlDataAdapter( "SELECT cate,cate2,cate3 FROM t WHERE bang='1'", cn); DataTable dt2 = new DataTable(); //答えを呼び出すSQL文 MySqlDataAdapter da3 = new MySqlDataAdapter( "SELECT answer FROM ans WHERE bang='1'", cn); DataTable dt3 = new DataTable(); // 検索 da.Fill(dt); da2.Fill(dt2); da3.Fill(dt3); // 表示 dataGridView1.DataSource = dt; //問題文表示 dataGridView2.DataSource = dt2; //テーブル表示 dataGridView3.DataSource = dt3; //答え表示 dataGridView3.Columns["answer"].Visible = false; //GridView3の"answer"カラムを非表示 //DBから切断 cn.Close(); }

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

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

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

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

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

guest

回答2

0

質問文だけでは推測になってしまうのですが...

提示されているコードで1問目は表示されているのですよね?
表示されているのであればSQL文の**bang='1'**の数字をクリックごとに増やせば良いのでないですか?

C#

1private int count = 0; 2 3private void button1_Click_1(object sender, EventArgs e) 4{ 5 count++; 6 MySqlDataAdapter da = new MySqlDataAdapter( 7 string.Format("SELECT question Q1 FROM que WHERE bang='{0}'", count.ToString()), cn); 8 9以下省略 10}

投稿2016/11/08 08:14

lain

総合スコア161

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

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

lain

2016/11/08 08:17

あぁ、同じ事投稿しちゃいました(汗)
pomi

2016/11/09 01:52

ご助言有難うございます。 おっしゃる通り次の問題を表示することができました。 本当に有難うございます。 ただ、ランダムに表示されている問題の次の問題を表示させたいと思っています。 そのため、現状だと仮に4問目の問題の次の表示は、 1問目から順に表示させるような形になってしまうのです。
guest

0

ベストアンサー

「次へ」ボタンを押したら問題文を更新したいということなのでしょうか?
メンバ変数を一つ用意して、button1_Click_1内でインクリメントしていけば、何回押されたかがわかります。
後はstring.Format等を使ってSQL文を書き換えてやれば実現できるのではないでしょうか?

C#

1int count = 0; // こんな感じのメンバ変数を定義しておく 2 3private void button1_Click_1(object sender, EventArgs e) 4{ 5 count++; // ボタンが押される度にインクリメント 6 MySqlDataAdapter da = new MySqlDataAdapter( 7 string.Format("SELECT question Q1 FROM que WHERE bang='{0}'", count) // {0}の部分がcountと同じ文字になる 8 , cn); 91011

投稿2016/11/08 08:05

ishi9

総合スコア1294

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

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

pomi

2016/11/09 01:52

ご助言有難うございます。 おっしゃる通り次の問題を表示することができました。 本当に有難うございます。 ただ、ランダムに表示されている問題の次の問題を表示させたいと思っています。 そのため、現状だと仮に4問目の問題の次の表示は、 1問目から順に表示させるような形になってしまうのです。
ishi9

2016/11/09 01:58

Random r = new Random(); int num = r.Next(0, 10); // 0以上10未満の乱数を整数で返す これで任意の範囲の乱数を得る事ができるので、上記のcount変数の部分をこれに置き換えてみてください。
pomi

2016/11/09 02:59

ご助言有難うございます。 参考にさせて頂きました。有難うございます。 現状、下記のように入力してますが問題の表示が最初から順序に ならって表示されてしまいます。。 わたしの入力で誤りがあれば教えて頂けたら幸いです。 //次へのボタン private int count = 0; private void button22_Click(object sender, EventArgs e) { Random r = new Random(); int num = r.Next(0, 20); // 0以上20未満の乱数を整数で返す MySqlDataAdapter da4 = new MySqlDataAdapter( string.Format("SELECT question FROM que WHERE bang='{0}'", count.ToString()), cn); DataTable dt4 = new DataTable(); // 検索 da4.Fill(dt4); // 表示 dataGridView1.DataSource = dt4; //DBから切断 cn.Close();
lain

2016/11/09 03:09

補足です。 ishi9さんが書かれているとおり、count++のところで乱数を入れるのですが、 Random.Nextだと重複した数字が出る可能性があります。 重複を省く乱数を発生させるアルゴリズムはいろいろあるので、 下記のページを参照してみてください。 https://teratail.com/questions/7924
lain

2016/11/09 03:13

int num = r.Next(0,20); ではなく count = r.Next(0,20); です。 あと、 Random r = new Random(); はクリックイベントの外のほうが良いと思います。
ishi9

2016/11/09 03:41 編集

>>pomi様 そのコードだとせっかく作ったnumを使用していません。count.ToString()のところをnum.ToString()にしてください。後、countは用済みなので消しておいた方が無難です。 それとlain様の仰るとおり、このやり方だと同じ問題が出現する可能性があります。それが嫌な場合はlain様のやり方を参考にしてください。 >>lain様 代わりにご助言ありがとうございます。
pomi

2016/11/11 06:53

ishi9様、lain様 ご回答有難うございます。 なんとか表示することが出来ました。 本当に有難うございます。 お二人にベストアンサーをしたいのですが、 最初の回答が早かったのでishi9様にさせて頂きますね。 またどうぞ宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問