teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

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

2016/10/03 02:15

投稿

退会済みユーザー
answer CHANGED
@@ -48,13 +48,20 @@
48
48
 
49
49
  (3) SqlDataSource.Updating イベントのハンドラ(メソッド)を作成。その中で FormView1_ItemUpdating メソッドの修正版で行ったように、FindControl で DropDownList を取得し、SelectedValue を取得し、point を計算する。
50
50
 
51
- (4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。
51
+ (4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。(訂正:C# と VB.NET のコードを併記しました)
52
52
 
53
+ C#
53
54
  ```
54
- e.Command.Parameters["@point"].Value = point
55
+ e.Command.Parameters["@point"].Value = point;
55
- e.Command.Parameters["@date"].Value = dtToday
56
+ e.Command.Parameters["@date"].Value = dtToday;
56
57
  ```
57
58
 
59
+ VB.NET
60
+ ```
61
+ e.Command.Parameters("@point").Value = point
62
+ e.Command.Parameters("@date").Value = dtToday
63
+ ```
64
+
58
65
  (5) FormView1_ItemUpdating メソッドは不要なので削除(とりあえずコメントアウトしてください)。
59
66
 
60
67
  上記は頭の中で考えただけで、当方では検証してません(できません)。質問者さんの方でやってみて結果を連絡ください。

1

具体的方法の追記

2016/10/03 02:15

投稿

退会済みユーザー
answer CHANGED
@@ -16,4 +16,49 @@
16
16
 
17
17
  > 上記にしたがって、「Private Property DropDownList1 As Object」の一文を付け足して実行すると、
18
18
 
19
- そういうことをするのは全くの見当違いです。
19
+ そういうことをするのは全くの見当違いです。
20
+
21
+ 【2016/10/3 10:50 追記】
22
+
23
+ 先の私の 2016/10/02 18:42 のコメントで書いた件の具体的な方法を追記します。
24
+
25
+ コメントで、
26
+
27
+ > FormView.ItemUpdating イベントでも渡せないか考えてみます
28
+
29
+ と書きましたが、直感的でなく混乱しそうなので、SqlDataSource.Updating イベントのハンドラで point と date のパラメータを渡すやり方を説明します。(FormView1_ItemUpdating メソッドは一切使いません)
30
+
31
+ (1) SqlDataSource の UpdateCommand に設定した UPADTE クエリに [point]=@point, [date]=@date を追加。以下のような感じです。
32
+
33
+ ```
34
+ UpdateCommand="UPDATE [tbl_testRg] SET [result1] = @result1, [result2] = @result2,
35
+         [result3] = @result3, [result4] = @result4, [result5] = @result5,
36
+ [point]=@point, [date]=@date WHERE [ID] = @ID">
37
+ ```
38
+
39
+ (場所は分かりますよね? FormView1_ItemUpdating メソッドの中の strSQL ではありませんよ)
40
+
41
+ (2) SqlDataSource の UpdateParameters に以下 Parameter を追加。上記 (1) のようなクエリにしたとすると以下のようになるはずです。
42
+
43
+ ```
44
+ <asp:Parameter Name="point" Type="Int32" />
45
+ <asp:Parameter Name="date" Type="DateTime" />
46
+
47
+ ```
48
+
49
+ (3) SqlDataSource.Updating イベントのハンドラ(メソッド)を作成。その中で FormView1_ItemUpdating メソッドの修正版で行ったように、FindControl で DropDownList を取得し、SelectedValue を取得し、point を計算する。
50
+
51
+ (4) 上記 (3) に続いて、ハンドラの引数 SqlDataSourceCommandEventArgs オブジェクトからパラメータを取得し、その Value プロパティに point と dtToday を代入する。以下のような感じです。
52
+
53
+ ```
54
+ e.Command.Parameters["@point"].Value = point
55
+ e.Command.Parameters["@date"].Value = dtToday
56
+ ```
57
+
58
+ (5) FormView1_ItemUpdating メソッドは不要なので削除(とりあえずコメントアウトしてください)。
59
+
60
+ 上記は頭の中で考えただけで、当方では検証してません(できません)。質問者さんの方でやってみて結果を連絡ください。
61
+
62
+ <追加情報>
63
+ 今回の問題とは直接関係ないことですが・・・
64
+ 最初の質問の画像を見ると ID フィールド以外は NULL 可になっているようです。実際にデータに NULL があると今のやり方では破綻するので注意してください。NULL にする必要がない限り NULL 不可にすることをお勧めします。