2015-08-13 36 views
10

我將一組對象綁定到DevExpress GridControl,並使用15.1 Data Annotations來自定義外觀。不過,我正在努力尋找關於設置一個屬性的列大小的任何事情。這可能通過註釋嗎?列寬的數據註釋

類具有註釋:

public class DataFeedback 
{ 
    [Display(Name = "Row Num", Order = 0)] 
    public int RowNum { get; set; } 
    [Display(Name = "Description", Order = 1)] 
    public string Desc { get; set; } 

    public DataFeedback(int rowNum, string desc) 
    { 
     RowNum = rowId; 
     Desc = desc; 
    } 
} 

簡單的綁定

var feedbackList = new List<DataFeedback>() 
feedbackList.Add(new DataFeedback(1, "test")) 
gridControl1.DataSource = feedbackList; 

// only layout I've found so far 
gridView1.BestFitColumns(); 
+0

你嘗試過使用StringLengthAttribute嗎? – Overmachine

回答

1

開箱不存在可用於指定UI網格的列大小的數據註釋屬性。 StringLength屬性(和其他屬性)用於指定數據庫中的列大小和數據驗證的數據大小,但這是遠遠不夠的。

我對DevExpress控件並不熟悉,但是如果它提供了自動列生成過程的鉤子,您可以執行類似於我爲Telerik網格所做的操作(http://geekswithblogs.net/sdorman/archive/2015/11/05/kendo-grid-mvc-wrapper-automatic-column-configuration.aspx)。

在該解決方案,我創建了一個自定義數據註解屬性(與此類似):

public class GridColumnAttribute : Attribute, IMetadataAware 
{ 
    public const string Key = "GridColumnMetadata"; 

    public string Width { get; set; } 

    public void OnMetadataCreated(ModelMetadata metadata) 
    { 
     metadata.AdditionalValues[GridColumnAttribute.Key] = this; 
    } 
} 

然後,裝點您的視圖模型:

public class DataFeedback 
{ 
    [Display(Name = "Row Num", Order = 0)] 
    [GridColumn(Width = "100px")] 
    public int RowNum { get; set; } 

    [Display(Name = "Description", Order = 1)] 
    [GridColumn(Width = "300px")] 
    public string Desc { get; set; } 
} 

最後,在獲取代碼從您的專欄生成鉤叫,你會做類似這樣的事情:

public static void ConfigureColumn<T>(GridColumnBase<T> column) where T : class 
{ 
    CachedDataAnnotationsModelMetadata metadata = ((dynamic)column).Metadata; 
    object attributeValue = null; 
    if (metadata.AdditionalValues.TryGetValue(GridColumnAttribute.Key, out attributeValue)) 
    { 
     var attribute = (GridColumnAttribute)attributeValue; 
     column.Width = attribute.Width; 
    } 
} 

它看起來就像您可以通過使用受支持的流暢API和With<T>擴展方法和/或可能掛接到RowCellStyle事件一樣執行此操作。 (https://documentation.devexpress.com/#WindowsForms/CustomDocument18017

如果你不能連接到列生成過程,你可能會做同樣的事情,但使用自己的擴展方法,在網格被綁定後調用,就像你在做致電BestFitColumns()