回答編集履歴

2 C# と VB.NET のコードを併記

SurferOnWww

SurferOnWww score 7915

2016/10/03 11:15  投稿

> コード上の「DropDownList○.SelectedValue」の部分で「DropDownList○は宣言されていません。
基本的に FormView とか DetailsView とか GridView とかに配置されたコントロール(今回の場合 DropDownList ですが、それは TextBox も同じこと)は DropDownList○ という形では取得できません。
理由は動的に生成される(静的には存在しない)からです。
取得するには FindControl メソッドを使用します。
Control.FindControl メソッド (String)
https://msdn.microsoft.com/ja-jp/library/486wc64h(v=vs.90).aspx
FormView1_ItemUpdating メソッドの中で FormView1.FindControl("DropDownList○") として取得できると思います。
Control 型を返すので DropDownList にキャストするのを忘れないようにしましょう。
> 上記にしたがって、「Private Property DropDownList1 As Object」の一文を付け足して実行すると、
そういうことをするのは全くの見当違いです。
【2016/10/3 10:50 追記】
先の私の 2016/10/02 18:42 のコメントで書いた件の具体的な方法を追記します。
コメントで、
> FormView.ItemUpdating イベントでも渡せないか考えてみます
と書きましたが、直感的でなく混乱しそうなので、SqlDataSource.Updating イベントのハンドラで point と date のパラメータを渡すやり方を説明します。(FormView1_ItemUpdating メソッドは一切使いません)
(1) SqlDataSource の UpdateCommand に設定した UPADTE クエリに [point]=@point, [date]=@date を追加。以下のような感じです。
```
UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2,
        [result3] = @result3, [result4] = @result4, [result5] = @result5,
               [point]=@point, [date]=@date WHERE [ID] = @ID">
```
(場所は分かりますよね? FormView1_ItemUpdating メソッドの中の strSQL ではありませんよ)
(2) SqlDataSource の UpdateParameters に以下 Parameter を追加。上記 (1) のようなクエリにしたとすると以下のようになるはずです。
```
<asp:Parameter Name="point" Type="Int32" />
<asp:Parameter Name="date" Type="DateTime" />
```
(3) SqlDataSource.Updating イベントのハンドラ(メソッド)を作成。その中で FormView1_ItemUpdating メソッドの修正版で行ったように、FindControl で DropDownList を取得し、SelectedValue を取得し、point を計算する。
(4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。
(4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。(訂正:C# と VB.NET のコードを併記しました)
C#  
```
e.Command.Parameters["@point"].Value = point
e.Command.Parameters["@date"].Value = dtToday
e.Command.Parameters["@point"].Value = point;
e.Command.Parameters["@date"].Value = dtToday;
```
VB.NET
```
e.Command.Parameters("@point").Value = point
e.Command.Parameters("@date").Value = dtToday
```
(5) FormView1_ItemUpdating メソッドは不要なので削除(とりあえずコメントアウトしてください)。
上記は頭の中で考えただけで、当方では検証してません(できません)。質問者さんの方でやってみて結果を連絡ください。
<追加情報>
今回の問題とは直接関係ないことですが・・・
最初の質問の画像を見ると ID フィールド以外は NULL 可になっているようです。実際にデータに NULL があると今のやり方では破綻するので注意してください。NULL にする必要がない限り NULL 不可にすることをお勧めします。
1 具体的方法の追記

SurferOnWww

SurferOnWww score 7915

2016/10/03 10:49  投稿

> コード上の「DropDownList○.SelectedValue」の部分で「DropDownList○は宣言されていません。
基本的に FormView とか DetailsView とか GridView とかに配置されたコントロール(今回の場合 DropDownList ですが、それは TextBox も同じこと)は DropDownList○ という形では取得できません。
理由は動的に生成される(静的には存在しない)からです。
取得するには FindControl メソッドを使用します。
Control.FindControl メソッド (String)
https://msdn.microsoft.com/ja-jp/library/486wc64h(v=vs.90).aspx
FormView1_ItemUpdating メソッドの中で FormView1.FindControl("DropDownList○") として取得できると思います。
Control 型を返すので DropDownList にキャストするのを忘れないようにしましょう。
> 上記にしたがって、「Private Property DropDownList1 As Object」の一文を付け足して実行すると、
そういうことをするのは全くの見当違いです。
そういうことをするのは全くの見当違いです。
【2016/10/3 10:50 追記】
先の私の 2016/10/02 18:42 のコメントで書いた件の具体的な方法を追記します。
コメントで、
> FormView.ItemUpdating イベントでも渡せないか考えてみます
と書きましたが、直感的でなく混乱しそうなので、SqlDataSource.Updating イベントのハンドラで point と date のパラメータを渡すやり方を説明します。(FormView1_ItemUpdating メソッドは一切使いません)
(1) SqlDataSource の UpdateCommand に設定した UPADTE クエリに [point]=@point, [date]=@date を追加。以下のような感じです。
```
UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2,
        [result3] = @result3, [result4] = @result4, [result5] = @result5,
               [point]=@point, [date]=@date WHERE [ID] = @ID">
```
(場所は分かりますよね? FormView1_ItemUpdating メソッドの中の strSQL ではありませんよ)
(2) SqlDataSource の UpdateParameters に以下 Parameter を追加。上記 (1) のようなクエリにしたとすると以下のようになるはずです。
```
<asp:Parameter Name="point" Type="Int32" />
<asp:Parameter Name="date" Type="DateTime" />
```
(3) SqlDataSource.Updating イベントのハンドラ(メソッド)を作成。その中で FormView1_ItemUpdating メソッドの修正版で行ったように、FindControl で DropDownList を取得し、SelectedValue を取得し、point を計算する。
(4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。
```
e.Command.Parameters["@point"].Value = point
e.Command.Parameters["@date"].Value = dtToday
```
(5) FormView1_ItemUpdating メソッドは不要なので削除(とりあえずコメントアウトしてください)。
上記は頭の中で考えただけで、当方では検証してません(できません)。質問者さんの方でやってみて結果を連絡ください。
<追加情報>
今回の問題とは直接関係ないことですが・・・
最初の質問の画像を見ると ID フィールド以外は NULL 可になっているようです。実際にデータに NULL があると今のやり方では破綻するので注意してください。NULL にする必要がない限り NULL 不可にすることをお勧めします。

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