2008-11-26 2 views

ответ

1

Вы можете сделать это, изменив порядок публичных объектов в файле LINQ to SQL.

Например, я отправился в Northwind.designer.cs, который был моим автоматически сгенерированным LINQ to SQL-файлом, и переместил общедоступное свойство с именем Products над общедоступным свойством CategoryName в public partial class Category. Затем я перекомпилировал и шаблон по умолчанию отобразил столбцы в моем новом порядке.

Конечно, это означает, что вы редактируете автоматически сгенерированный код, и если вы его регенерируете, ваши изменения теряются, поэтому этот метод не обходится без опасности.

1

Вам необходимо создать пользовательскую страницу в папке DynamicData.

Вот шаги:

  • Создать папку, то же имя, как имя таблицы, которые вы хотите, чтобы настроить порядок столбцов в разделе «DynamicData \ CustomPages» папку
  • Создание пользовательской страницы в папке DynamicData \ CustomPages \ [папка с именем таблицы].
    • Я просто скопировал существующий файл «List.aspx» из «DynamicData \ PageTemplates» в папку выше.
  • Открыть файл ASPX и изменить GridView управление «AutoGenerateColumns =" ​​ложь»
  • Внутри колонны раздел GridView, добавить«DynamicControl»управления со значением атрибута«DataField»на имя вашей колонки в заказ, который вы хотите.

Вот скринкаст от ScottHa: http://www.asp.net/learn/3.5-SP1/video-293.aspx

2

this По теме - вы можете использовать ColumnOrderAttribute в динамической библиотеке DLL фьючерсных данных. Вы можете захватить фьючерсы из кода.

1

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

Чтобы избежать использования Библиотеки 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;} 
} 
+0

Просто то, что мне нужно .. спасибо! – ArjanP 2011-03-03 02:50:59

11

В .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; } 
1

Я ответ на старый вопрос, потому что мне кажется, что возможное решение изменилось в новых версиях фреймворки.

Кажется, что Дисплей (Заказ) работает прямо по запросу (Visual Web Developer 2010 на .NET 4.0) без какого-либо конкретного способа обхода.

Пример:

[Display(Order = 50)] 

Важная вещь, это проверить правильное имя объекта для отображения ForeignKey:

в один проект поле OperatoreID переводится в класс объектов, как:

public object Operatore { get; set; } 

является оператором исходной таблицы внешнего ключа; для второй ссылки в той же таблице он получит что-то вроде 1 и так далее.

 Смежные вопросы

  • Нет связанных вопросов^_^