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

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

ただいまの
回答率

90.34%

C#のデータベースについて

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 755

Sekiyu_

score 33

現在C#の入門書を参考に学習支援アプリケーション作っていて, ある程度完成してきたので追加機能として「科目名」で科目を選択するとその下の項目の「参考書」という欄にその科目の参考書が連動して表示させるというものを追加しようと考えたのですが, 色々調べてみたのですが方法がわかりませんでした. そこで質問なのですがこのような機能を実装するにはどうしたらいいのでしょうか? またそれに準ずる知識はどのような分野で得られるでしょうか?
イメージ説明
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

Sekiyu_さん、はじめまして。
プログラミングの勉強で色々と悩んでいらっしゃるようですね。

プログラミングの上達のひとつは、自分なりに何かを作りたいと思うことだと思います。
ですから、いまSekiyu_さんの取り組みはとても良いことだと思います。

自分はteratailをはじめたのはつい最近ですが、これから何かをはじめたい方のサポートが出来ればと考えています。

さて、今回のケースですが、やりたい事があるものの、どう質問してよいも分からない状況だとお見受けしました。

C#のデータベースについて

とありますが、何かしらデータベースを使用している状況でしょうか。
自分はWPFはほとんど触ったことがないので、現時点ではあまり有効な回答は出来ないかもしれないですが、とりあず見よう見まねで次のように画面を作ってみました。

イメージ説明

とりあえず科目名にはそのままアイテムを追加しています。

        <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="300,17,0,0" VerticalAlignment="Top" Width="207" SelectionChanged="comboBox_SelectionChanged">
            <ComboBoxItem Content="国語" HorizontalAlignment="Left" Width="205"/>
            <ComboBoxItem Content="英語" HorizontalAlignment="Left" Width="205"/>
            <ComboBoxItem Content="数学" HorizontalAlignment="Left" Width="205"/>
            <ComboBoxItem Content="社会" HorizontalAlignment="Left" Width="205"/>
            <ComboBoxItem Content="理科" HorizontalAlignment="Left" Width="205"/>
            <ComboBoxItem Content="保健体育" HorizontalAlignment="Left" Width="205"/>
        </ComboBox>

続いて、科目名のコンボボックス(combobox)をダブルクリックして、標準で作成されるコンボボックスの選択を変更した際のイベントを作成します。
そのイベント内にて、選択変更したアイテムの名称をデバッグ出力させてみます。

        private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(comboBox.SelectedValue);
        }

デバッグで実行して、表示を確認してみます。
イメージ説明

というわけで、コンボボックスのプロパティ、SelectedValueが、現在選択されている項目の値を返すことがわかります。

ただ、実は自分はこの回答を書く段階までわかっていませんでしたが、SelectedValueはそのままシンプルに文字列を返してくれるわけではないようですね。
コンボボックスにアイテムを追加する際に、<ComboBoxItem Content="国語" ...としています。

一度、デバッグでその場所を止めて、どのような情報となっているかウォッチしてみます。
見たい場所にブレークポイントを設定します。ショートカットは F9 ですね。
ブレークポイントでとまったら、SelectedValueの場所にカーソルを合わせます。
イメージ説明

表示を展開して、"国語"だけを取得できるプロパティを探してみます。
イメージ説明

ありました。Contentですね。
さらに、詳しい情報を見るため、虫眼鏡のアイコンをクリックして、[テキスト ビジュアライザー]ダイアログを表示させて確認します。
イメージ説明

((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Contentとかなていますね・・・

「キャスト」はわかりますでしょうか?とりあえず、ここでは説明を省きますね・・・

先ほどのデバッグ出力でコレをそのまま書き込んでみます。

        private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content);
        }

出力を確認すると、文字列そのものが出力されました。
イメージ説明

なるほど。
<ComboBoxItem Content="国語" HorizontalAlignment="Left" Width="205"/>として登録した項目の型は、ContentControlであり、Content="国語"としたので、Contentプロパティで取得できる。そのままですね。

さて、値が取れるのが分かりましたので、例えば、これをとりあえずデータベースではなく手作業で表示項目を作成した場合、次のようになります。

        private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            comboBox1.Items.Clear();
            switch (((System.Windows.Controls.ContentControl)comboBox.SelectedValue).Content.ToString())
            {
                case "国語":
                    comboBox1.Items.Add("国語参考書1");
                    break;
                case "英語":
                    comboBox1.Items.Add("英語参考書1");
                    break;
                case "数学":
                    comboBox1.Items.Add("数学参考書1");
                    break;
                case "社会":
                    comboBox1.Items.Add("社会参考書1");
                    break;
                case "理科":
                    comboBox1.Items.Add("理科参考書1");
                    break;
                case "保健体育":
                    comboBox1.Items.Add("保健体育参考書1");
                    break;
            }
        }

実行してみます。まず、参考書には何も表示されていません。
イメージ説明

"国語"を選択してみます。
イメージ説明

参考書のコンボボックスに、"国語参考書1"が追加されています。
イメージ説明

これで、科目名の選択に応じて、参考書に項目を表示できるようになりました。

参考になりましたでしょうか?

本来はこれをデータベースに接続して行うことになりますが、まずは最低限出来る方法からやってみようということで紹介しました。

以上

ちなみに・・・・
今は分からないことがたくさんあると思います。
ですが、もし今自分が作ろうとしているものについて、「作りたい!」という意思があるのなら、そのモチベーションを失わない良い方法は、出来ないことがあったらすぐその回答を得てしまうことだと自分は考えています。
この考え方は人によっては否定的になるかと思います。なんでも人に頼ってしまい自分では考えなくなってしまう可能性があるからです。魚を与えるのではなく釣り方を教えるの考えですね。
自分もそうした考えに賛同していますが、何かをはじめて間もない時は、やりたい気持ちを失わないのが一番重要だと考えていますので、うまく出来なければ、遠慮せずに質問を出してください。

ただ、その際に、自力で解決できるようなヒントも合わせて回答していきたいと思います。
今回もそのヒントがあります。是非活用してください!

あっちなみに、自分はWPFを良く知らないので、Sekiyu_さんがその画面をどのようなスタイルで作ったのかわかりませんでした。差し支えなければ教えてください!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/14 03:55

    回答ありがとうございます! 質問のことから学習姿勢のことまで色々とありがとうございます...おっしゃる通り「何を質問すればいいかわからない」状態で, 周りに聞けるような人もおらず自分で調べ見てもわからないというような状況が3日程続いていおりました... 回答を参考に今回の問題, 更にはこれからの学習も頑張っていこうと思います! 本当にありがとうございました!!

    キャンセル

  • 2017/01/14 04:11 編集

    自分もこんな時間になんですが、ちゃんと寝てくださいね!

    この質問の前の『初心者からの脱却について』についてもざっくり皆さんの意見を読んでみましたが、皆さんがおっしゃる心構えなどは、技術者として"この先生きのこる"ためにも重要なことをおっしゃっていると思います。

    同じく事を繰り返しますが、それゆえに、自分のようにすぐ直接の答えなどを回答することは望ましくない場合もあります。
    ですが、今の状態はまずプログラミングを楽しめるようになることですから、3日もまよわず、このサイトのコンセプトでもある「15分調べても分からないことは、質問しよう!」の精神で進めていくのがよいと思います。

    ですから、どうか質問することに萎縮せずに、それで怒られたって、将来出来るようになれば良いのだと思います。

    頑張ってください!


    ちなみに、調べ物など例えば、自分はまず次のように検索したりします。
    ※こっちのコメント欄はMarkdownじゃないのかな??(自分も扱いなれていないサイトではこういうへまをします。でも、そのまま載せておきます・・・)

    [Googleで”C# wpf はじめて”として検索](https://www.google.co.jp/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#q=C%23+wpf+%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6)

    そこで、見つかった次のような記事を試してみたりなど。(まだ試してみないので、一応やってみようかなと思っています)
    [チュートリアル: 初めての WPF デスクトップ アプリケーション](https://msdn.microsoft.com/ja-jp/library/mt270964.aspx)

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る