- - PR -
GridView で更新でエラー
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-21 16:02
お世話になります。
GridView の更新ボタンを押すと下記のエラーが出ます。どう対処したらいいでしょうか?関係ないかもしれませんが、サンプルとしていくつか作っていたものを1つのプロジェクトにまとめています。SQLも移動して再度設定しているのでいいと思っているのですが....また、この更新の前の表示は、正しく動作しています。 「更新 コマンドが SqlDataSource 'SqlDataSource1' 上の値すべてを比較するように指定しましたが、oldValues に対して渡されたディレクトリは空です。更新 に対して有効なディレクトリを渡すか、またはモードを OverwriteChanges に変更してください」 VS2005 C# ASP.NET よろしくお願いします。 | ||||||||
|
投稿日時: 2008-05-22 01:25
うまくいってるものがあるならそれと比較してみては?
とりあえず、SqlDataSourceのConflictDetectionがCompareAllValuesのときに出てそうなエラーです。 できれば現象が再現する最小のやり方を示してください。 | ||||||||
|
投稿日時: 2008-05-22 13:42
お世話になります。
> うまくいってるものがあるならそれと比較してみては? 更新するとき、「データソースの構成」で「テーブルまたはビューから列...」ー「詳細設定」「SQL生成の詳細オプション」で「INSERT,UPDATEおよびDELETEステートメント...」にチェックを入れたものは動作しています。が「カスタムステートメントまたはストアドプロシージャを定義します」で下記のように書いたとき、クエリビルダから「クエリの実行」すると(Dateに日付を入れ、他にも文字を入れて試すと)変更されています。 しかし、GridView の編集ボタンからデータを入れ「更新」を押すとエラーになるようです。 UPDATE Holidays SET IsOff = @IsOff, WorkStartTime1 = @WorkStartTime1, WorkEndTime1 = @WorkEndTime1, WorkStartTime2 = @WorkStartTime2, WorkEndTime2 = @WorkEndTime2 WHERE (Date = @Date) | ||||||||
|
投稿日時: 2008-05-22 16:09
比較してみては?というのは
『「INSERT,UPDATEおよびDELETEステートメント...」にチェックを入れたもの』と 『「カスタムステートメントまたはストアドプロシージャを定義します」で下記のように書いたとき』 双方のaspxやcsファイルを比較してみては?という意味です。動作が違うんだから何か違うと思います。 | ||||||||
|
投稿日時: 2008-05-22 16:31
直接の回答ではありませんが、
私だったら GridView.RowUpdating イベント をハンドルして、GridViewUpdateEventArgs オブジェクトのプロパティを確認します。 | ||||||||
|
投稿日時: 2008-05-23 09:26
お世話になります。
> 比較してみては?というのは UpdateCommand の後に、この文章がありConflictDetection="CompareAllValues" OldValuesParameterFormatString="original_{0}" これを削除することによりエラーは、出なくなりました。ただ、データが書き換わりません。テンプレートの編集でEditItemTemplate をドロップダウンリストに変更し選択したものを書き込もうとしています。この場合もコードなしで選択したものを書き込めますか? > GridView.RowUpdating イベント をハンドルして、GridViewUpdateEventArgs オブジェクトのプロパティを確認します このハンドラを追加しe.NewValuesの値は、_objectsArray = Count = 0 になっています。 GridView1_RowUpdating(....) foreach (DictionaryEntry entry in e.NewValues) { e.NewValues[entry.Key] = Server.HtmlEncode(entry.Value.ToString()); } UpdateCommand のコード下記のようになってました。今は、ConflictDetection、OldValuesParameterFormatStringの2つを消してます。エラーで止まらないものの更新しない。特にメッセージはない。 UpdateCommand="UPDATE [Holidays] SET [IsOff] = @IsOff, [WorkStartTime1] = @WorkStartTime1, [WorkEndTime1] = @WorkEndTime1, [WorkStartTime2] = @WorkStartTime2, [WorkEndTime2] = @WorkEndTime2 WHERE [Date] = @Date" ConflictDetection="CompareAllValues" OldValuesParameterFormatString="original_{0}" OnSelecting="SqlDataSource1_Selecting" OnUpdating="SqlDataSource1_Updating"> | ||||||||
|
投稿日時: 2008-05-23 12:22
ドロップダウンにしたのが意図する差異ですね(こういうことは最初に言ってください)
このあたりが参考になると思います http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_04/vs2005db_04_02.html http://www.microsoft.com/japan/msdn/net/aspnet/GridViewEx11.aspx | ||||||||
|
投稿日時: 2008-05-23 15:36
お世話になります。
ドロップダウンリストのデータバインディングにセットすることで更新させることができました。ありがとうございました。 |
1