访问动态数据中正在编辑的对象/行

时间:2009-03-04 21:25:54

标签: asp.net dynamic-data

我正在修改ASP.NET动态数据使用的“Edit.aspx”默认页面模板,并添加一些其他控件。我知道我可以通过查看DetailsDataSource.GetTable().EntityType找到正在编辑的对象类型,但我怎样才能看到实际对象本身?另外,我可以更改对象的属性并告诉数据上下文提交这些更改吗?

3 个答案:

答案 0 :(得分:1)

也许你已经找到了解决方案,但是我想就此分享我的表现。

原来是一个伟大的皮塔饼,但我设法获得了编辑行。我不得不提取DetailsDataSource WhereParameters,然后在运行时创建一个查询。

以下代码适用于具有单个主键的表。如果你有复合键,我想,它需要修改:

Parameter param = null;
foreach(object item in (DetailsDataSource.WhereParameters[0] as DynamicQueryStringParameter).GetWhereParameters(DetailsDataSource)) {
    param = (Parameter)item;
    break;
}

IQueryable query = DetailsDataSource.GetTable().GetQuery();
ParameterExpression lambdaArgument = Expression.Parameter(query.ElementType, "");
object paramValue = Convert.ChangeType(param.DefaultValue, param.Type);
Expression compareExpr = Expression.Equal(
    Expression.Property(lambdaArgument, param.Name),
    Expression.Constant(paramValue)
);
Expression lambda = Expression.Lambda(compareExpr, lambdaArgument);
Expression filteredQuery = Expression.Call(typeof(Queryable), "Where", new Type[] { query.ElementType }, query.Expression, lambda);
var WANTED = query.Provider.CreateQuery(filteredQuery).Cast<object>().FirstOrDefault<object>();

答案 1 :(得分:0)

如果它是DD对象,您可以使用FieldTemplateUserControl.FindFieldTemplate(controlId)。然后,如果需要,可以将其转换为ITextControl来操作数据。

否则,请尝试使用此扩展方法来查找子控件:

    public static T FindControl<T>(this Control startingControl, string id) where T : Control
    {
        T found = startingControl.FindControl(id) as T;

        if (found == null)
        {
            found = FindChildControl<T>(startingControl, id);
        }

        return found;
    }

答案 2 :(得分:0)

我找到了另一个解决方案,其他解决方案无效 就我而言,我在/ CustomPages / Devices /
中复制了Edit.aspx 其中设备是我想要此自定义行为的表的名称。

在Edit.aspx中添加此内容 - &gt; Page_Init()

DetailsDataSource.Selected += entityDataSource_Selected;

在Edit.aspx中添加:

protected void entityDataSource_Selected(object sender, EntityDataSourceSelectedEventArgs e)
{
    Device device = e.Results.Cast<Device>().First();       
    // you have the object/row being edited !
}

只需将设备更改为您自己的表名。