2015-08-13 16 views
10

Tôi đang ràng buộc một tập hợp các đối tượng vào DevExpress GridControl và sử dụng 15.1 Data Annotations để tùy chỉnh giao diện. Tuy nhiên tôi đang đấu tranh để tìm bất cứ điều gì về việc thiết lập kích thước cột của một tài sản. Điều này có thể thông qua chú thích không?Chú thích dữ liệu cho chiều rộng cột

Class với chú thích:

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; 
    } 
} 

Simple Binding

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

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

bạn đã thử sử dụng StringLengthAttribute chưa? – Overmachine

Trả lời

1

Không có thuộc tính chú thích dữ liệu có thể được sử dụng để chỉ định kích thước cột của lưới giao diện người dùng. Thuộc tính StringLength (và các thuộc tính khác) được sử dụng để xác định kích thước cột trong cơ sở dữ liệu và kích thước của dữ liệu để xác thực dữ liệu, nhưng đó là điều họ sẽ đi.

Tôi không quen với các điều khiển DevExpress, nhưng nếu nó cung cấp một móc trong quá trình tạo cột tự động, bạn có thể làm một cái gì đó tương tự như những gì tôi đã làm cho lưới Telerik (http://geekswithblogs.net/sdorman/archive/2015/11/05/kendo-grid-mvc-wrapper-automatic-column-configuration.aspx).

Trong giải pháp đó, tôi đã tạo ra một thuộc tính dữ liệu tùy chỉnh chú thích (tương tự như sau):

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; 
    } 
} 

Sau đó, bạn trang trí mô hình xem của bạn:

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; } 
} 

Cuối cùng, trong các mã mà được được gọi từ móc tạo cột, bạn sẽ làm điều gì đó tương tự như sau:

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; 
    } 
} 

Có vẻ như bạn có thể thực hiện việc này bằng cách sử dụng API thông thạo được hỗ trợ và phương thức mở rộng With<T> và/hoặc có thể tham gia sự kiện RowCellStyle. (https://documentation.devexpress.com/#WindowsForms/CustomDocument18017)

Nếu bạn không thể móc vào quy trình tạo cột, bạn có thể làm điều tương tự nhưng sử dụng phương pháp mở rộng của riêng bạn được gọi sau khi lưới bị ràng buộc, giống như bạn đang làm với số điện thoại BestFitColumns().

Các vấn đề liên quan