2009-03-04 2 views
3

ASP.NETダイナミックデータで使用される「Edit.aspx」デフォルトページテンプレートを変更し、いくつかのコントロールを追加します。私はDetailsDataSource.GetTable().EntityTypeを見て編集中のオブジェクトのタイプを見つけることができますが、実際のオブジェクト自体をどのように見ることができますか?また、オブジェクトのプロパティを変更して、データコンテキストに変更を送信するよう指示することはできますか?ダイナミックデータで編集中のオブジェクト/行へのアクセス

+0

いつ実際のオブジェクトにアクセスしようとしていますか? – RSolberg

+0

使用できるDataBoundイベントはありますか? – hunter

答えて

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>(); 
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; 
    } 
0

、他のものは動作しませんでした。
私の場合は、/ CustomPages/Devices/
にあるEdit.aspxをコピーしました。デバイスは、このカスタム動作が必要なテーブルの名前です。

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 ! 
} 

ちょうどあなた自身のテーブル名にデバイスを変更します。

関連する問題