0

私はSilverlight4でDataFormを使用しています。実際にはいくつかのDataFormがあり、それらは共通のRIAサービスコンテキストを共有しています。これが私が抱えている問題です...

いずれかのDataFormsでDataFieldの編集を開始し、Context.SubmitChanges()を呼び出すボタンをクリックすると、次のエラーが発生します。

�Entity 'foo' is currently being edited and has uncommitted changes. 
  A call to BeginEdit must be followed by a call to EndEdit or CancelEdit 
  before changes can be submitted.� 

[変更の送信]ボタンはDataFormsの外部にあり、DataForms間で共有されるRIAサービスコンテキストに適用されることに注意してください(それぞれがタブコントロールの個別のタブにあります)。

DataFormが編集モードになっていることをコードで検出することで、この問題を回避できるようにしたいと思います。デバッグモードのとき、DataFormに次のようなプロパティがIsEditingありCanCancelEdit、編集モードであることを示していることがわかりますが、これらのプロパティはコードで使用できないようです。

何か案は?

4

5 に答える 5

3

DomainContext.SubmitChanges()を呼び出す前にDataForm.CommitEdit()を呼び出して、エラーを完全に回避できます。

于 2010-10-07T00:14:16.263 に答える
3

ワンライナーの問題を修正するためにSubmitChanges()を呼び出す前に、データグリッドでCommitEditメソッド(DataFormでも同じである必要があります)を使用しました。

myDataGrid.CommitEdit(DataGridEditingUnit.Row, true);
于 2012-11-13T20:29:01.413 に答える
1

IsEditingCanCancelEditあるかはわかりませんが、文書化されていません。

ただし、列挙、、、およびであるModeプロパティがあります。実際に変更が加えられたかどうかを示すプロパティもあり、編集が開始されました。DataFormModeReadOnlyEditAddNewIsItemChanged

于 2010-10-05T07:41:24.797 に答える
0

_isEditing使用可能なプロパティのいずれも必要な情報を提供しなかったため、 「false」に初期化される独自のプライベートフィールド(DataFormを含むUserControl内)を作成することになりました。DataForm.BeginningEditイベントハンドラーでは「true」に設定し、イベントDataForm.EditEndedハンドラーでは「false」に設定しました。IsEditing次に、値を外部で利用できるようにするために呼び出される読み取り専用のパブリックプロパティを作成しました。

于 2010-10-06T17:46:28.733 に答える
0

私は今、このコードを使用して、私が抱えていた問題を解決しました。これは、[保存]ボタンがクリックされたときに、私のコードビハインドにあります。

        bool editresult = true;
        this.FindChildrenByType<DataGrid>().ToList().ForEach(grid =>
        {
            editresult = editresult && grid.CommitEdit(DataGridEditingUnit.Row, true) && grid.IsValid;
        });

        if (!editresult)
        {
            _messager.Alert("There is a problem with one of the items shown on the screen. This will usually be highlighted in red.\r\nPlease correct the item(s) and try saving again.");
        }
        else
        {
            // Save changes
        }

DataGrid.CommitEdit(DataGridEditingUnit.Row、true)は、データグリッドに行をコミットするように指示し、最後のブール値は、グリッドに編集モードを終了するように指示します。これは、行が編集モードを終了する必要があるかどうかに応じて、trueまたはfalseを返します。通常、行を編集していて検証エラーがあるグリッドでは、グリッドは別のアイテムをクリックして編集モードを終了することはできませんが、この呼び出しは終了を許可しますが、falseを返します。DataGrid.IsValidは、グリッド内のすべてのアイテムをチェックして、それらが有効かどうかを確認します。

于 2011-10-04T15:06:34.880 に答える