public virtual GridBoundColumnBuilder <TModel> ForeignKey(Type memberType, string memberName, SelectList data) { const bool liftMemberAccess = false; var lambdaExpression = ExpressionBuilder.Lambda <TModel>(memberType, memberName, liftMemberAccess); if (typeof(TModel).IsDynamicObject() && memberType != null && lambdaExpression.Body.Type.GetNonNullableType() != memberType.GetNonNullableType()) { lambdaExpression = Expression.Lambda(Expression.Convert(lambdaExpression.Body, memberType), lambdaExpression.Parameters); } var columnType = typeof(GridForeignKeyColumn <,>).MakeGenericType(new[] { typeof(TModel), lambdaExpression.Body.Type }); var constructor = columnType.GetConstructor(new[] { Container.GetType(), lambdaExpression.GetType(), data.GetType() }); var column = (IGridBoundColumn)constructor.Invoke(new object[] { Container, lambdaExpression, data }); column.Member = memberName; if (!column.Title.HasValue()) { column.Title = memberName.AsTitle(); } if (memberType != null) { column.MemberType = memberType; } Container.Columns.Add((GridColumnBase <TModel>)column); return(new GridBoundColumnBuilder <TModel>(column)); }