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

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

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

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

Q&A

解決済

2回答

9912閲覧

C# 選択されていないlistBoxの項目名を取得したい

KFSIT

総合スコア29

C#

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

0グッド

0クリップ

投稿2017/07/13 04:41

編集2017/07/13 05:13

いつも大変お世話になっております。

開発環境:visual studio2015 enterprise
作成しているもの:windowsフォームアプリケーション
.NETFrameworkバージョン:4.6.1

ただ今listBoxに格納されている値を全て取得し、
それをtreeViewに表示するというものを作成中です。

下記が私の今のコードです。

var id = textBox1.Text; var password = textBox2.Text; var db = comboBox1.Text; var ip = textBox4.Text; string connection = "userid=" + id + ";password=" + password + ";database=" + db + ";server=" + ip + ";"; MySqlConnection conn = new MySqlConnection(connection); MySqlDataAdapter da = new MySqlDataAdapter("show tables from " + db + ";", conn); DataTable dt = new DataTable("DB"); da.Fill(dt); listBox1.DisplayMember= "tables_in_" + db; listBox1.DataSource = dt; treeView1.BeginUpdate(); treeView1.Nodes.Add("テスト"); int item = listBox1.Items.Count; for (int i = 0; i < item; i++) { text = listBox1.Items[i].ToString(); treeView1.Nodes[0].Nodes.Add(text); } treeView1.EndUpdate();

このコードを実行するとtreeViewには

テスト____System.Data.DataRowView |____System.Data.DataRowView |____System.Data.DataRowView

と表示されてしまいます。
System.Data.DataRowViewではなく、listBoxに存在する項目名を表示するようにしたいです。

ネットで調べたところ、

string[] text = this.listBox1.Items.Cast<string>().ToArray();

上記のコードで選択していない項目を含めてすべて取得できるとあったのですが、
私の環境だと
型 'System.InvalidCastException' のハンドルされていない例外が System.Core.dll で発生しました

追加情報:型 'System.Data.DataRowView' のオブジェクトを型 'System.String' にキャストできません。
というエラーがでて使えませんでした。

ご教授お願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

dt の値を設定するのではダメなのでしょうか?

C#

1int item = dt.Rows.Count; 2for (int i = 0; i < item; i++) 3{ 4 var text = dt.Rows[i]["tables_in_" + db].ToString(); 5 treeView1.Nodes[0].Nodes.Add(text); 6} 7

って感じですかね

投稿2017/07/13 05:41

koguma98

総合スコア288

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

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

KFSIT

2017/07/13 05:45

回答ありがとうございます。 dtの値を設定することができることを知りませんでした。 書いて頂いた通りにした結果、期待通りの動作をしてくれました。 ありがとうございます。
koguma98

2017/07/13 06:14

問題とは異なる話ですが、 元のコードに合わせて for で記述しましたが、 for よりも foreach を使った方が簡潔に記述できますので、 ちょっと調べてみてもいいかもしれません。 foreach(var dr in dt.Rows)
guest

0

下記コードでどうでしょう?

C#

1for (int i = 0; i < item; i++){ 2 listBox1.SelectedIndex = i; 3 test = listBox1.SelectedItem.ToString(); 4 treeView1.Nodes[0].Nodes.Add(text); 5} 6

選択されているアイテムが変わるので
それが嫌な場合は現在の選択を保持しておいて
後で反映する等の対応が必要となります。

投稿2017/07/13 05:26

Shirata

総合スコア38

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

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

KFSIT

2017/07/13 05:41

回答ありがとうございます。 選択する場所を変えることは考えつきませんでした。 test = listBox1.SelectedItem.ToString();を test = listBox1.Text;に変えたところ動くようになりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問