回答編集履歴

2 コードま間違いの修正

twck

twck score 301

2016/09/12 09:00  投稿

> FormViewでの表示内容を反映させることについては以下の部分の記述方法で一応成功しました。
> SelectedValue='<%# Bind("result1") %>'
これは解決したってことでいいんですかね?
一応、それ以外の方法も載せておきます。
データをバインドしたときのイベント内にて値をセットする方法です。
```VB
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 = "はい"
                   DirectCast(FormView1.FindControl("DropDownList2"), DropDownList).SelectedValue = "いいえ"
                   DirectCast(FormView1.FindControl("DropDownList3"), DropDownList).SelectedValue = "はい"
                   DirectCast(FormView1.FindControl("DropDownList4"), DropDownList).SelectedValue = "はい"
                   DirectCast(FormView1.FindControl("DropDownList5"), DropDownList).SelectedValue = "未回答"
                   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") %>' の方法より柔軟性があります。
1 コードの追加

twck

twck score 301

2016/09/09 17:11  投稿

> FormViewでの表示内容を反映させることについては以下の部分の記述方法で一応成功しました。
> SelectedValue='<%# Bind("result1") %>'
これは解決したってことでいいんですかね?
一応、それ以外の方法も載せておきます。
データをバインドしたときのイベント内にて値をセットする方法です。
```VB
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 = "はい"  
                   DirectCast(FormView1.FindControl("DropDownList2"), DropDownList).SelectedValue = "いいえ"  
                   DirectCast(FormView1.FindControl("DropDownList3"), DropDownList).SelectedValue = "はい"  
                   DirectCast(FormView1.FindControl("DropDownList4"), DropDownList).SelectedValue = "はい"  
                   DirectCast(FormView1.FindControl("DropDownList5"), DropDownList).SelectedValue = "未回答"  
               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") %>' の方法より柔軟性があります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る