Доступ к редактируемому объекту / строке в динамических данных - PullRequest
3 голосов
/ 05 марта 2009

Я изменяю шаблон страницы "Edit.aspx" по умолчанию, используемый ASP.NET Dynamic Data, и добавляю некоторые дополнительные элементы управления. Я знаю, что могу найти тип редактируемого объекта, посмотрев на DetailsDataSource.GetTable().EntityType, но как я могу увидеть сам объект? Кроме того, могу ли я изменить свойства объекта и сообщить контексту данных о необходимости отправить эти изменения?

Ответы [ 3 ]

1 голос
/ 18 марта 2009

Возможно, вы уже нашли решение, однако я хотел бы поделиться с вами своим опытом.

Оказалось, что это отличная пита, но мне удалось получить строку редактирования. Мне пришлось извлечь 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>();
0 голосов
/ 24 июля 2015

Я нашел другое решение, другие не работали.
В моем случае я скопировал файл Edit.aspx в / CustomPages / Devices /
Где Устройства - это имя таблицы, для которой я хочу это пользовательское поведение.

Добавьте это в Edit.aspx -> 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 !
}

Просто измените Device на собственное имя таблицы.

0 голосов
/ 13 июня 2009

Если это объект 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;
    }
...