1

我正在试验 .Net RIA 和 Silverlight,我有一些相关的实体;客户、项目和工作,一个客户有很多项目,一个项目有很多工作。

在 Silverlight 应用程序中,我使用 DomainDataSource 和 DataForm 控件来执行 CRUD 操作。选择客户端时,将出现一个项目列表,此时用户可以为该客户端添加新项目。我希望能够自动填写客户端的值,但似乎没有任何方法可以做到这一点,虽然 DataForm 控件上有一个 AdditionalNewItem 事件,但它似乎在 DataForm 有一个之前触发新对象的实例,我不确定从 DomainDataSource SubmittingChanges 事件中搜索 ChangeSet 是最好的方法。

我认为这将是一个明显的功能……有人知道实现此功能的最佳方法吗?

4

4 回答 4

1

通常做的事情是有一个包含显示现有数据的 DataGrid 的屏幕。然后有一个添加按钮,它将:

  1. 创建一个新项目
  2. 创建一个 ChildWindow,将新项目传递给 ChildWindow 构造函数
  3. 在 ChildWindow 中有一个 DataForm,绑定到指定的项目
于 2009-10-07T19:35:08.940 回答
1

好吧,聚会迟到但面临同样的问题,我使用值转换器实施了一种解决方法:

public class MissingDateTimeValueConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (value is DateTime && (DateTime)value == DateTime.MinValue) {
            DateTime returnValue = DateTime.Now.Date;
            int addDays;
            if (!string.IsNullOrEmpty(parameter as string) && int.TryParse(parameter as string, out addDays)) {
                returnValue = returnValue.AddDays(addDays);
            }
            return returnValue;
        } else {
            return value;   
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        return value;            
    }

}

它将缺失的日期值(例如 01.01.0001)转换为今天的日期,并允许使用 -parameter参数添加/减去天数。

于 2010-04-30T12:33:26.723 回答
1

为了在创建我的实体时设置默认值,我添加了一个名为 [EntityName].shared.cs 的类。然后我使用了这个链接上拼写的技术。它对我来说效果很好。

于 2011-01-26T21:37:35.350 回答
0

此解决方案允许您在集合末尾添加新项目。集合绑定到 DataForm。在退出当前处理程序之前,将 DataForm.CurrentIndex 设置为集合中的最后一项,然后取消添加过程。新项目已初始化/添加并在 Dataform 中可见,可供编辑。

private void ResolutionDataForm_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
    {
        // add a new iten in collection
        Resolution resolution = new Resolution() { FaultName = "test" };
        context.Resolutions.Add(resolution);
        //through binding the form gets updated
        ResolutionDataForm.CurrentIndex = context.Resolutions.Count-1;

        // cancel de current adding procedure
        e.Cancel = true;

    }
于 2013-02-08T01:50:59.077 回答