2008-11-26 65 views

回答

1

您可以通過修改LINQ to SQL文件中公共屬性的順序來實現。

例如,我進入了Northwind.designer.cs,這是我自動生成的LINQ to SQL文件,並將名爲Products的公共屬性移動到public partial class Category中的公共屬性CategoryName的上方。然後我重新編譯,默認模板以我的新順序顯示列。

當然,這意味着您編輯自動生成的代碼,如果您重新生成它,您的更改將丟失,所以這種技術不是沒有危險。

1

您必須在DynamicData文件夾中創建一個自定義頁面。

步驟如下:

  • 創建一個文件夾是相同的名稱表名稱要自定義下的「DynamicData \ CustomPages」文件夾
  • 列的順序創建自定義頁面在「DynamicData \ CustomPages \ [帶表名的文件夾]」文件夾下。
    • 我只是將「DynamicData \ PageTemplates」中現有的「List.aspx」文件複製到上面的文件夾中。
  • 打開aspx文件並修改GridView控件「的AutoGenerateColumns =‘假’,」
  • 的GridView的內柱部分,用「數據字段」屬性值加「DynamicControl」控制你列的名稱你想要的訂單。

這裏是ScottHa截屏: http://www.asp.net/learn/3.5-SP1/video-293.aspx

2

按照this話題 - 你可以在動態數據期貨DLL使用ColumnOrderAttribute。您可以從codeplex獲取期貨。

1

的GridView有ColumnsGenerator財產,通過實施IAutoFieldGenerator界面中,你可以根據你的自定義規則設置字段訂單GenerateFields方法使用它(屬性,元信息,...)

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,你可以滾你自己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

我回答一個老問題,因爲它似乎對我來說,可能的解決方案在該框架的新版本改變。

看起來Display(Order)現在直接按照問題(.NET 4.0上的Visual Web Developer 2010)工作,沒有任何特殊的解決方法。

例子:

[Display(Order = 50)] 

是按正確的對象名稱來映射外鍵一個重要的事情:

在一個項目

場OperatoreID在實體類譯爲:

public object Operatore { get; set; } 

正在操作外鍵的源表;對於同一個表中的第二個參考,它將得到類似1等等。