Кто-нибудь знает, можно ли выбрать порядок полей в динамических данных (конечно, без настройки шаблонов для каждой таблицы)?Порядок полей в динамических данных?
Спасибо!
Кто-нибудь знает, можно ли выбрать порядок полей в динамических данных (конечно, без настройки шаблонов для каждой таблицы)?Порядок полей в динамических данных?
Спасибо!
Вы можете сделать это, изменив порядок публичных объектов в файле LINQ to SQL.
Например, я отправился в Northwind.designer.cs, который был моим автоматически сгенерированным LINQ to SQL-файлом, и переместил общедоступное свойство с именем Products над общедоступным свойством CategoryName в public partial class Category. Затем я перекомпилировал и шаблон по умолчанию отобразил столбцы в моем новом порядке.
Конечно, это означает, что вы редактируете автоматически сгенерированный код, и если вы его регенерируете, ваши изменения теряются, поэтому этот метод не обходится без опасности.
Вам необходимо создать пользовательскую страницу в папке DynamicData.
Вот шаги:
Вот скринкаст от ScottHa: http://www.asp.net/learn/3.5-SP1/video-293.aspx
this По теме - вы можете использовать ColumnOrderAttribute в динамической библиотеке DLL фьючерсных данных. Вы можете захватить фьючерсы из кода.
GridView имеет ColumnsGenerator свойства, использовать его путем реализации методы GenerateFields интерфейса IAutoFieldGenerator, в котором вы можете установить поле заказы на основе пользовательских правил (атрибуты, метаинформация, ...)
protected override void OnInit(EventArgs e)
{
...
this.gvItemsList.ColumnsGenerator = new EntityFieldsGenerator(CurrentDataSource.CurrentTableMetadata);
...
}
public class EntityFieldsGenerator : IAutoFieldGenerator {
...
public ICollection GenerateFields(Control control)
{
// based on entity meta info
var fields = from item in this.entityMetadata.Columns
where this.IncludeColumn(item.Value)
orderby item.Value.Order
select new DynamicField
{
DataField = item.Value.Column.Name,
HeaderText = item.Value.DisplayName,
DataFormatString = item.Value.DataFormatString,
UIHint = GetColumnUIHint(item.Value)
};
return fields.ToList();
} }
Чтобы избежать использования Библиотеки DLL фьючерсы Dynamic Data, вы можете свернуть свой собственный атрибут ColumnOrder следующим образом:
[AttributeUsage(AttributeTargets.Property)]
public class ColumnOrderAttribute : Attribute
{
public int Order { get; private set; }
public ColumnOrderAttribute() { Order = int.MaxValue; }
public ColumnOrderAttribute(int order) { Order = order; }
public static ColumnOrderAttribute Default = new ColumnOrderAttribute();
}
, а затем в своем классе, который реализует IAutoFieldGenerator, у вас есть
public static class ExtensionMethods
{
public static int GetOrder (this MetaColumn column)
{
var orderAttribute = column.Attributes.OfType<ColumnOrderAttribute>().DefaultIfEmpty(ColumnOrderAttribute.Default).Single();
return orderAttribute.Order;
}
}
public ICollection GenerateFields(Control control)
{
var fields = new List<DynamicField>();
var columns = _table.Columns.OrderBy(column => column.GetOrder());
foreach (var column in columns)
{
if (!column.Scaffold) { continue; }
fields.Add(new DynamicField {DataField = column.Name});
}
}
и, наконец, ваше использование будет выглядеть
[MetadataType(typeof(CustomerMetadata))]
public partial class Customer {}
public class CustomerMetadata
{
[ColumnOrder(1)]
public object FirstName {get;set;}
[ColumnOrder(2)]
public object LastName {get;set;}
}
В .NET 4.0, используя 4.0 выпуска DLL динамических данных, вы можете установить аннотации данных следующим образом:
[Display(Name = " Mission Statement", Order = 30)]
public object MissionStatement { get; set; }
[Display(Name = "Last Mod", Order = 40)]
public object DateModified { get; private set; }
Я ответ на старый вопрос, потому что мне кажется, что возможное решение изменилось в новых версиях фреймворки.
Кажется, что Дисплей (Заказ) работает прямо по запросу (Visual Web Developer 2010 на .NET 4.0) без какого-либо конкретного способа обхода.
Пример:
[Display(Order = 50)]
Важная вещь, это проверить правильное имя объекта для отображения ForeignKey:
в один проект поле OperatoreID переводится в класс объектов, как:
public object Operatore { get; set; }
является оператором исходной таблицы внешнего ключа; для второй ссылки в той же таблице он получит что-то вроде 1 и так далее.
Просто то, что мне нужно .. спасибо! – ArjanP 2011-03-03 02:50:59