none
オプティミスティック同時実行制御のチェックを入れると削除が失敗する RRS feed

  • 質問

  • Visual Web Developer 2008を使いWebフォーム上に
    ListViewを貼り付けています。
    (ListViewの構成でオプションを全てチェックしています)

    自動生成された画面で削除を実行すると
    下記のエラーになります。(編集、挿入は正常動作します)

    削除 コマンドが SqlDataSource 'SqlDataSource1' 上の値すべてを比較するように指定しましたが、values に対して渡されたディレクトリは空です。削除 に対して有効なディレクトリを渡すか、またはモードを OverwriteChanges に変更してください。

    テーブル項目はコードと名称があるだけで各項目NULL禁止でコードが主キーになっています。

    申し訳ないですがこの場合の対処方法があれば
    教えていただけないでしょうかよろしくお願いします。
    (オプティミスティック同時実行制御のチェックをしなければ問題ない事は確認しています

    2009年8月1日 14:17

回答

  • 1.の質問に関しては、ブラウザに表示されているものをコピーしてるので間違いはありません。
    了解しました。ディレクトリはディクショナリだと思いますので、日本語訳が誤っている可能性もあります。Valuesは間違いではないかもしれません。 ListViewDeleteEventArgsにValuesプロパティがあるからです。


    2.の正しく値が渡るようにセットされていますかですが、この部分はデータソースの構成から自動生成したものです。
    (同様の方法でGridViewの方の削除は問題ありません)
    了解です。この部分には特に問題がないようです。
    原因がわからなかったのでテストコードを書いてみました。簡単に不具合が再現しました。
    どうやらItemTemplate内がEvalで作成されるのが問題のようです。Evalだと一方向なので双方向であるBindに書き換えてください。
    このため、パラメータに値が渡らないようです。
    Visual Web Developer 2008や私が試したVisual Studio 2008の不具合かもしれません。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク マイルス 2009年8月2日 12:44
    2009年8月2日 2:20
    モデレータ
  • AlternatingItemTemplate の方も Bind に変更しましたか?
    • 回答としてマーク マイルス 2009年8月2日 12:44
    2009年8月2日 11:25

すべての返信

  • 掲載されたエラーメッセージが不正確だと思いますが、もう一度確認してみて下さい。
    例えばディレクトリはディクショナリだと思いますし、valuesはOldValuesかNewValuesということではないでしょうか?

    とりあえずこのエラーの原因については以下を確認してみて下さい。

    1.削除のSQL文はどうなっていますか?
    2.そのSQL文のパラメータに対して、正しく値が渡るようにセットされていますか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年8月1日 15:50
    モデレータ
  • お世話になります。

    1.の質問に関しては、ブラウザに表示されているものをコピーしてるので間違いはありません。

    2.の正しく値が渡るようにセットされていますかですが、この部分はデータソースの構成から自動生成したものです。
    (同様の方法でGridViewの方の削除は問題ありません)


    下記はSqlDataSourceです。(自動生成)

            ConflictDetection="CompareAllValues"
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            DeleteCommand="DELETE FROM [company_tbl] WHERE [companyid] = @original_companyid AND [company_name] = @original_company_name"
            InsertCommand="INSERT INTO [company_tbl] ([companyid], [company_name]) VALUES (@companyid, @company_name)"
            OldValuesParameterFormatString="original_{0}"
            SelectCommand="SELECT [companyid], [company_name] FROM [company_tbl]"
           
            UpdateCommand="UPDATE [company_tbl] SET [company_name] = @company_name WHERE [companyid] = @original_companyid AND [company_name] = @original_company_name">
            <DeleteParameters>
                <asp:Parameter Name="original_companyid" Type="String" />
                <asp:Parameter Name="original_company_name" Type="String" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="company_name" Type="String" />
                <asp:Parameter Name="original_companyid" Type="String" />
                <asp:Parameter Name="original_company_name" Type="String" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="companyid" Type="String" />
                <asp:Parameter Name="company_name" Type="String" />
            </InsertParameters>

    2009年8月1日 16:29
  • 1.の質問に関しては、ブラウザに表示されているものをコピーしてるので間違いはありません。
    了解しました。ディレクトリはディクショナリだと思いますので、日本語訳が誤っている可能性もあります。Valuesは間違いではないかもしれません。 ListViewDeleteEventArgsにValuesプロパティがあるからです。


    2.の正しく値が渡るようにセットされていますかですが、この部分はデータソースの構成から自動生成したものです。
    (同様の方法でGridViewの方の削除は問題ありません)
    了解です。この部分には特に問題がないようです。
    原因がわからなかったのでテストコードを書いてみました。簡単に不具合が再現しました。
    どうやらItemTemplate内がEvalで作成されるのが問題のようです。Evalだと一方向なので双方向であるBindに書き換えてください。
    このため、パラメータに値が渡らないようです。
    Visual Web Developer 2008や私が試したVisual Studio 2008の不具合かもしれません。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク マイルス 2009年8月2日 12:44
    2009年8月2日 2:20
    モデレータ
  • こんにちは、EvalをBindに変更したところ一部削除可能になりました。
    と言うのは、登録した順番に消さないとエラーになってしまいます。
    やはり不具合として諦めるしかないのかなと思っています。
    2009年8月2日 7:06
  • AlternatingItemTemplate の方も Bind に変更しましたか?
    • 回答としてマーク マイルス 2009年8月2日 12:44
    2009年8月2日 11:25
  • AlternatingItemTemplate の方も Bind に変更しましたか?

    SurferOnWwwさん、解決しました。

    ありがとうございました。
    2009年8月2日 12:43