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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

1279閲覧

MVC SELECT文をList<String>に格納する方法

kasa_4333

総合スコア2

C#

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2022/09/20 04:36

前提

前回の質問で
https://teratail.com/questions/iuigiyod3mzyma
ドロップダウンリストを作成し、決まっている値を選択し、検索することができました。

現在の画面では備品マスタの一覧画面とテキストボックス、プルダウンリスト、検索ボタンが表示されています。

実現したいこと

ドロップダウンリストの選択リストに決まった値ではなく、備品マスタの備考カラムの内容が表示されるようにしたいです。

前回の質問でList<String>にSELECT文(SELECT DISTINCT Bikou FROM Bihin)が取得できれば良いと教えていただきました。

そこでList<String>にSELECT文を取得する方法を教えていただきたいです。

発生している問題・エラーメッセージ

Index.cshtml

@using (Html.BeginForm()) { <p> Find by name: @Html.TextBox("SearchString") <br /> @Html.DropDownList("DropDown", null, "未選択", htmlAttributes: new { @class = "form-control" }) <input type="submit" value="Search" /> </p>

該当のソースコード

BihinController

c#

1 public ActionResult Index(string searchString, string dropDown) 2 { 3 // DB に SELECT DISTINCT Bikou FROM Bihin を投げて以下の 4 // データが取得できたとすると 5 var data = new List<string> { "2階", "1階", "緑" }; 6 7 // 上のデータから List<SelectListItem> を生成 8 var list = new List<SelectListItem>(); 9 foreach (var str in data) 10 { 11 var item = new SelectListItem { Text = str, Value = str }; 12 list.Add(item); 13 } 14 15 // DropDownList には ViewData または ViewBag を使って渡す 16 ViewData["DropDown"] = list; 17 18 return View(); 19 }

試したこと

Controllerの
var data = new List<string> { "2階", "1階", "緑" };
この部分にList<String>にSELECT文を取得できれば良いと前回のスレッドで教えていただきました。

補足情報(FW/ツールのバージョンなど)

データベースはSQLServerです。
備品マスタ
物品名 | 数量 | 備考

洗剤 | 2 | 二階
ティッシュ | 1 | 箱
・・・

ドロップダウンリスト ↓
二階

・・・
(データベースが更新されたらもちろんドロップダウンリストの選択リストも更新されます)

ASP.NET MVC 
Windows 10 Pro,
Visual Studio2022 Version 17.3.2
.NET framework 4.7.2

EntityFrameworkは使用しません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/20 05:14

前の前のスレッド https://teratail.com/questions/5uqbokcpzdugfaADO.NET + SqlClient を使って DataTable に SELECT クエリの結果を取得してから、それを List<T> 型のオブジェクトに加工してましたよね。それができるなら、なぜ Select DISTINCT Bikou FROM Bihin でも同様なことができないのですか? そのことは前のスレッドでも何度か言ったけど何も返事がない。スルーしないで答えてください。 それから、 > 対象の DB の構造、Entity Framework は使わないと言うこと、その他もろもろありそうな要件など詳しく書いてください。 とも言ったけど、ちゃんとやってください。 もう一つ、研修の課題なら講師に聞きましょうと何度もアドバイスしてるけど、そこはどうなっているのですか? 講師に聞けば、face-to-face で話ができて、あなたが何が分からないかまで会話のやり取りで探ってもらえて、あなたが知りたいことにズバリ答えてもらえるのでは?
kasa_4333

2022/09/20 05:21

>前の前のスレッド https://teratail.com/questions/5uqbokcpzdugfaADO.NET + SqlClient を使>って DataTable に SELECT クエリの結果を取得してから、それを List<T> 型のオブジェクトに加工>してましたよね。それができるなら、なぜ Select DISTINCT Bikou FROM Bihin でも同様なことがで>きないのですか? command.CommandText でSELECT文をかいてDataTableにSQL結果を設定したのでそのようにやればよいのですか、、select文が変わっただけで、同じ処理がおこなわれているのですね。 > 対象の DB の構造、Entity Framework は使わないと言うこと、その他もろもろありそうな要件など詳しく書いてください。 Entity Framework は使わないと言うことは備考にかいてあります。 DBの構造についてですが、自分なりにかいてみたのですがどのあたりの情報がたりないでしょうか。 >もう一つ、研修の課題なら講師に聞きましょうと何度もアドバイスしてるけど、そこはどうなっているのですか? こちらに関しては九月いっぱい夏季休暇なので直接聞きたいところではありますが、聞けておりません。
退会済みユーザー

退会済みユーザー

2022/09/20 05:59

> command.CommandText でSELECT文をかいてDataTableにSQL結果を設定したのでそのようにやればよいのですか、、select文が変わっただけで、同じ処理がおこなわれているのですね。 前の前のスレッド https://teratail.com/questions/5uqbokcpzdugfa では、どうすれば SQL Server からデータが取れるか分かった上で、自分でコードを書いたのではないのですか? だとしたらどうしてそんな分かり切ったことを聞くのですか? 聞く前に自分の手を動かしてやってみてはいかが? 実は前のコードは講師とかに教えてもらったもので自分では全く理解できてないとか? であればそう書きましょう。 > DBの構造についてですが、自分なりにかいてみたのですがどのあたりの情報がたりないでしょうか。 SSMS が使えるのであれば当該テーブルを右クリックして「デザイン」を表示してそのスクリーンショットを取ってそれを質問に貼ってください。 Entity Framework は使わない以外に「その他もろもろありそうな要件」も書いてください。実はあれもダメとかこれもダメとかを後出しで言わないように。
退会済みユーザー

退会済みユーザー

2022/09/20 12:30

返事しないし、話が通じないし・・・  一度読んでみましょう⇒ https://teratail.com/help/question-tips そこに書いてあることができないなら、講師の夏季休暇明けの 10 月まで待って講師に聞いてください。それがあなたにとってベストだと思いますよ。
退会済みユーザー

退会済みユーザー

2022/09/22 03:11

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいは返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。解決したなら解決に役立った回答にベストアンサーをつけてクローズしてください。とにかく無言で放置は NG です。
guest

回答1

0

上のコメントの質問に対する返事がないのでいろいろ不明ですが、SQL Server の当該フィールドの型は nvarchar であろうと想像し、Entity Framework は使わない以外の要件はないという条件で回答を書いておきます。

例として、以下のような SQL Server のテーブルに、

イメージ説明

以下の SELECT クエリを投げて取得することとします。

SELECT DISTINCT CategoryName FROM Categories

Categories テーブルのレコードの中の CategoryName を重複しないように取得し、ASP.NET MVC5 アプリの DropDownList に表示するということです。

以下のコードのように、コントローラーのアクションメソッドで、SqlDataReader で読んできたデータを使って List<SelectListItem> を生成し、ViewData を使って View の DropDownList に渡します。

public ActionResult Index(string searchString, string dropDown) { var connString = "・・・接続文字列・・・"; var query = "SELECT DISTINCT CategoryName FROM Categories"; var list = new List<SelectListItem>(); using (var connection = new SqlConnection(connString)) { connection.Open(); using (var command = new SqlCommand(query, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { var item = new SelectListItem { Text = reader.GetString(0), Value = reader.GetString(0) }; list.Add(item); } } } } // View には ViewData を使って渡す ViewData["DropDown"] = list; return View(); }

View の DropDownList の設定は以下のようにします。第 1 引数と第 3 引数に注意。前のスレッド https://teratail.com/questions/iuigiyod3mzyma の説明参照。

@using (Html.BeginForm()) { <p> Find by name: @Html.TextBox("SearchString") <br /> @Html.DropDownList("DropDown", null, "未選択", htmlAttributes: new { @class = "form-control" }) <input type="submit" value="Search" /> </p> }

結果は:

イメージ説明

投稿2022/09/21 09:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問