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

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

ただいまの
回答率

90.34%

FormViewで表示されるラベルコントロールの内容を別ページのDropDownListのデフォルト選択肢に反映させたいです。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,791

taketake221

score 15

ASP.NET Webフォームアプリに関する質問です。 
過去の回答をもとに新しい回答が可能な質問回答機能を考えています。

※OSはWindows7、.NET Framework4、Visual Stdio 2010、SQLserver2012、IE11を利用しています。

以下のような過去の回答一覧が格納されるテーブル(わかりやすいようにレコードはひとつだけですが、本来は複数格納され、ひとつのカード画面にひとつの回答一覧、という具合です)をコントロールを用いて表示します。
イメージ説明
ID : int型、result1 ~ result5 : string型

イメージ説明

表示用のラベルコントロールの内容を回答用ドロップダウンリストのデフォルトの選択肢に反映させることはできないのでしょうか。

「編集」ボタンをおすと(ボタンはItemTemplateに設置)、以下のような回答ページにとびます(別ページ)。
イメージ説明]

この際、遷移前のフォームビューの回答一覧を遷移後の回答ドロップダウンリストの選択肢に反映させることはできないでしょうか。

たとえば、FormViewでの表示が「はい」なら、ドロップダウンリストでデフォルト選択されているのも「はい」といった具合です。

<ドロップダウンリストの選択肢>
※ Text :「はい」 value : はい
Text :「いいえ」 value : いいえ
Text :「未回答」 value : 未回答

※9/11 追記
フォームビューのボタンがクリックされた段階で、フォームビューに回答を表示させるためのラベルの値を読み取り、セッション変数に格納するやり方を考えています。

過去回答テーブルには複数の回答一覧が格納されるため、初期(デフォルト)選択肢は固定でない方が望ましいです。

<全体(フォームビューのものです)>

    <asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" 
        DataSourceID="SqlDataSource1" AllowPaging="True">
        <EditItemTemplate>
            <br />
            <table cellpadding="0" cellspacing="0" class="style3">
                <tr>
                    <td>
                        ID</td>
                    <td>
                        <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' />
                    </td>
                </tr>
                <tr>
                    <td class="style4">
                        Result1</td>
                    <td class="style4">
                        <asp:DropDownList ID="DropDownList1" runat="server"
                            SelectedValue='<%# Bind("result1") %>'>
                            <asp:ListItem>はい</asp:ListItem>
                            <asp:ListItem>いいえ</asp:ListItem>
                            <asp:ListItem>未回答</asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
'ドロップダウンリスト5つ分
            </table>
            <br />
            <asp:Button ID="Button2" runat="server" CommandName="Update" Text="登録" />
            <asp:Button ID="Button3" runat="server" CommandName="Cancel" Text="キャンセル" />
            &nbsp;
        </EditItemTemplate>
                <ItemTemplate>
            <br />
            <table cellpadding="0" cellspacing="0" class="style3">
                <tr>
                    <td>
                        ID</td>
                    <td>
                        <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Result1</td>
                    <td>
                        <asp:Label ID="result1Label" runat="server" Text='<%# Bind("result1") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Result2</td>
                    <td>
                        <asp:Label ID="result2Label" runat="server" Text='<%# Bind("result2") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Result3</td>
                    <td>
                     <asp:Label ID="result3Label" runat="server" Text='<%# Bind("result3") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Result4</td>
                    <td>
                     <asp:Label ID="result4Label" runat="server" Text='<%# Bind("result4") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Result5</td>
                    <td>
                     <asp:Label ID="result5Label" runat="server" Text='<%# Bind("result5") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        &nbsp;</td>
                    <td>
                        &nbsp;</td>
                </tr>
            </table>
            <br />
            <asp:Button ID="Button1" runat="server" CommandName="Edit" Text="編集" />
            &nbsp;
        </ItemTemplate>
    </asp:FormView>
</asp:Content>

わかりにくい質問ですが、反応いただけるとありがたいです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • twck

    2016/09/08 21:39

    .aspxファイルのFormViewの部分のソースと、FormViewにデータをバインドしている部分のソースも見せてもらえますか?

    キャンセル

回答 2

checkベストアンサー

0

FormViewでの表示内容を反映させることについては以下の部分の記述方法で一応成功しました。
SelectedValue='<%# Bind("result1") %>'

これは解決したってことでいいんですかね?

一応、それ以外の方法も載せておきます。
データをバインドしたときのイベント内にて値をセットする方法です。

Private Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound

    '新規登録モードのときのみ
    If FormView1.CurrentMode = FormViewMode.Insert Then

        '初期値用のレコードを読み込んで各コントロールにセットする
        Using db As New System.Data.SqlClient.SqlConnection(接続文字列)
            db.Open()
            Dim cmd = db.CreateCommand()
            cmd.CommandText = "SELECT * FROM テーブル名 WHERE ID = 初期値のレコードのキー"
            Using reader = cmd.ExecuteReader
                If reader.Read Then

                    'FormView1の中から各コントロールを探して値をセットする
                    DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue = reader("result1").ToString
                    DirectCast(FormView1.FindControl("DropDownList2"), DropDownList).SelectedValue = reader("result2").ToString
                    DirectCast(FormView1.FindControl("DropDownList3"), DropDownList).SelectedValue = reader("result3").ToString
                    DirectCast(FormView1.FindControl("DropDownList4"), DropDownList).SelectedValue = reader("result4").ToString
                    DirectCast(FormView1.FindControl("DropDownList5"), DropDownList).SelectedValue = reader("result5").ToString
                End If
            End Using
        End Using
    End If

    '編集モードのときのみ
    If FormView1.CurrentMode = FormViewMode.Edit Then

        'データを取得する
        Dim row = DirectCast(FormView1.DataItem, System.Data.DataRowView)

        'FormView1の中から各コントロールを探して値をセットする
        DirectCast(FormView1.FindControl("DropDownList1"), DropDownList).SelectedValue = row("result1").ToString
        DirectCast(FormView1.FindControl("DropDownList2"), DropDownList).SelectedValue = row("result2").ToString
        DirectCast(FormView1.FindControl("DropDownList3"), DropDownList).SelectedValue = row("result3").ToString
        DirectCast(FormView1.FindControl("DropDownList4"), DropDownList).SelectedValue = row("result4").ToString
        DirectCast(FormView1.FindControl("DropDownList5"), DropDownList).SelectedValue = row("result5").ToString
    End If
End Sub


コードで記述できるため、プロパティだけを使う SelectedValue='<%# Bind("result1") %>' の方法より柔軟性があります。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/12 15:13

    上記のように変更して「新しいレコードを挿入するために挿入モードでなければなりません」という例外が表示されるようだったら、Form_Loadイベント辺りで以下のようにモードを調整するコードを追加する。

    If FormView1.CurrentMode = FormViewMode.Edit Then
    FormView1.ChangeMode(FormViewMode.Insert)
    End If

    キャンセル

  • 2016/09/15 03:18

    ご回答いただきありがとうございます。重ね重ねお世話になります。
    しばらく返信・作業ができない状態で反応が大幅に遅れてしまい誠に申し訳ありません。

    引き続きその状態が続く見込みですので、ひとまずご回答へのお礼を。
    いただいたご回答の内容を試してみて、後日改めての返信とさせてください。
    申し訳ありません。

    キャンセル

  • 2016/10/02 15:36

    前回の返信をお送りしてからだいぶ時間が経過してしまい申し訳ありません。
    紆余曲折をへて、こちらが想定していた仕様と大きく異なり、結局新規登録云々は立ち消えとなり、単純に上書き編集におけるラベルコントロールの反映ですみました。

    丁寧にご回答いただいていたにもかかわらず、こちらの反応が遅れに遅れてしまい本当に申し訳ありませんでした。
    お詫びもしきれませんが、ベストアンサーを押させていただきますね。

    キャンセル

0

ソースの掲示がされてないので、
推測を交えた回答となりますが、
以下のようなイメージでやりたい事が行えるのではないでしょうか?

dropdownlist1.ClearSelection(); // 事前に選択状態をクリアしておく

string selectValue = "はい";  // 選択したい項目値
var item = dropdownlist1.Items.FindByValue(selectValue);
if (item != null){
    item.Selected = true;
}

下記はVB版

dropdownlist1.ClearSelection() ' 事前に選択状態をクリアしておく

Dim selectValue As String  = "はい"  ' 選択したい項目値
Dim item = dropdownlist1.Items.FindByValue(selectValue)
If item IsNot Nothing Then
    item.Selected = True
End If


以下は各メソッド・プロパティのmsdnによる解説です、参考までにどうぞ。
(機械語翻訳で日本語が怪しい所があります^^;)

ClearSelectionメソッド
FindByValueメソッド
Selectedプロパティ

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/09 16:43

    重ね重ねお世話になります。ご回答いただきありがとうございます。
    返信が大幅に遅れてしまい申し訳ありません。
    不足かもしれませんが、フォームビューのソースは追加記載いたしました。

    編集モード時における単純な反映については成功したのですが、新規回答用フォームに反映させるしくみで苦悩中です。
    反応いただけるとありがたいです。

    キャンセル

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

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

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

  • トップ
  • SQL Serverに関する質問
  • FormViewで表示されるラベルコントロールの内容を別ページのDropDownListのデフォルト選択肢に反映させたいです。