0

我在 Silverlight 4 中使用 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

在我调用 SubmitChanges() 之前,我在我的数据网格上使用了 CommitEdit 方法(在 DataForm 上应该是相同的),以便用一条线解决问题。

myDataGrid.CommitEdit(DataGridEditingUnit.Row, true);
于 2012-11-13T20:29:01.413 回答
3

您可以在调用 DomainContext.SubmitChanges() 之前调用 DataForm.CommitEdit() 并完全避免错误。

于 2010-10-07T00:14:16.263 回答
1

我不确定是什么IsEditingCanCancelEdit它们没有记录。

但是,有一个Mode属性是DataFormMode枚举ReadOnlyEditAddNew。还有一个IsItemChanged属性指示是否已进行任何实际更改,开始编辑。

于 2010-10-05T07:41:24.797 回答
0

由于没有可用的属性提供我需要的信息,我最终创建了自己的私有字段(在包含 DataForm 的 UserControl 中),该字段_isEditing被初始化为“false”。在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) 告诉数据网格提交行,最后一个布尔值告诉网格退出编辑模式。这将根据行是否应该退出编辑模式返回真或假。通常在您正在编辑一行并且存在验证错误的网格中,网格不会让您通过单击另一个项目来退出编辑模式,但是此调用将允许退出但返回 false。DataGrid.IsValid 检查网格中的所有项目以查看它们是否有效。

于 2011-10-04T15:06:34.880 回答