public void GetDisplayString() { MetaModel m = Utils.CommonInitialize(true); var route = RouteTable.Routes[0] as MyDynamicDataRoute; MetaTable t = m.Tables[TestDataContext.TableFooWithDefaults]; var foo = new FooWithDefaults(); Assert.AreEqual(String.Empty, t.GetDisplayString(null), "#A1"); AssertExtensions.Throws <HttpException> (() => t.GetDisplayString(String.Empty), "#A2"); Assert.AreEqual("hello", t.GetDisplayString(foo), "#A3"); AssertExtensions.Throws <HttpException> (() => t.GetDisplayString("TestString"), "#A4"); // The method looks at the entity type to see if it has an overriden ToString method, // it ignores such methods on the passed "row" var foo2 = new FooWithToString(); Assert.AreEqual("hello", t.GetDisplayString(foo2), "#B1"); t = m.Tables[TestDataContext.TableFooWithToString]; Assert.AreEqual("ValueFrom_ToString", t.GetDisplayString(foo2), "#C1"); // If we pass an object which is not of EntityType, // the method returns the result of row.ToString () Assert.AreEqual(foo.GetType().ToString(), t.GetDisplayString(foo), "#C2"); var foo3 = new FooNoDefaultsWithPrimaryKey(); t = m.Tables[TestDataContext.TableFooNoDefaultsWithPrimaryKey]; Assert.AreEqual(String.Empty, t.GetDisplayString(foo3), "#D1"); }
private void BindToDataItem(object dataItem) { dataItem = Misc.GetRealDataItem(dataItem); Debug.Assert(dataItem != null, "DataItem is null"); // Try to get the MetaTable from the type and if we can't find it then ---- up. MetaTable table = Misc.GetTableFromTypeHierarchy(dataItem.GetType()); if (table == null) { throw new InvalidOperationException(String.Format( CultureInfo.CurrentCulture, DynamicDataResources.MetaModel_EntityTypeDoesNotBelongToModel, dataItem.GetType().FullName)); } string action = GetActionOrDefaultTo(PageAction.Details); NavigateUrl = table.GetActionPath(action, GetRouteValues(table, dataItem)); if (String.IsNullOrEmpty(Text)) { if (!String.IsNullOrEmpty(DataField)) { Text = DataBinder.GetPropertyValue(dataItem, DataField).ToString(); } else { Text = table.GetDisplayString(dataItem); } } }
public static void FillListItemCollection(System.Web.DynamicData.MetaTable table, ListItemCollection listItemCollection) { Func <object, object> func2 = null; IQueryable query = table.GetQuery(); IEnumerable enumerable = null; MetaColumn sortColumn = table.SortColumn; if (sortColumn == null) { enumerable = query; } else if (sortColumn.IsCustomProperty) { IEnumerable <object> source = query.Cast <object>().AsEnumerable <object>(); if (func2 == null) { func2 = delegate(object row) { return(DataBinder.GetPropertyValue(row, sortColumn.Name)); }; } Func <object, object> keySelector = func2; if (table.SortDescending) { enumerable = source.OrderByDescending <object, object>(keySelector); } else { enumerable = source.OrderBy <object, object>(keySelector); } } else { ParameterExpression expression = Expression.Parameter(table.EntityType, "row"); LambdaExpression expression2 = null; if (sortColumn is MetaForeignKeyColumn) { MetaColumn column = (sortColumn as MetaForeignKeyColumn).ParentTable.SortColumn; expression2 = Expression.Lambda(Expression.Property(Expression.Property(expression, sortColumn.Name), column.Name), new ParameterExpression[] { expression }); } else { expression2 = Expression.Lambda(Expression.Property(expression, sortColumn.Name), new ParameterExpression[] { expression }); } string methodName = table.SortDescending ? "OrderByDescending" : "OrderBy"; MethodCallExpression expression3 = Expression.Call(typeof(Queryable), methodName, new Type[] { query.ElementType, expression2.Body.Type }, new Expression[] { query.Expression, expression2 }); enumerable = query.Provider.CreateQuery(expression3); } foreach (object obj2 in enumerable) { string displayString = table.GetDisplayString(obj2); string primaryKeyString = table.GetPrimaryKeyString(obj2); listItemCollection.Add(new ListItem(displayString, primaryKeyString.TrimEnd(new char[0]))); } }
private static string CreateAutoCompleteItem(MetaTable table, object row) { return AutoCompleteExtender.CreateAutoCompleteItem(table.GetDisplayString(row), table.GetPrimaryKeyString(row)); }