2015-08-13 16 views
10

Wiążę kolekcję obiektów z narzędziem DevExpress GridControl i za pomocą 15.1 Data Annotations dostosuję wygląd. Jednak staram się znaleźć cokolwiek na temat ustawiania rozmiaru kolumny właściwości. Czy jest to możliwe dzięki adnotacjom?Adnotacja danych dla szerokości kolumny

Klasa z adnotacjami:

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

Proste Oprawa

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

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

czy próbowałeś użyć StringLengthAttribute? – Overmachine

Odpowiedz

1

wyjęciu z pudełka nie ma atrybuty adnotacji danych, które mogą być wykorzystane do określenia rozmiaru kolumny siatki UI. Atrybut StringLength (i inne) są używane do określania wielkości kolumny w bazie danych i rozmiaru danych do sprawdzania poprawności danych, ale to jest tak daleko, jak to możliwe.

Nie jestem zaznajomiony z kontrolkami DevExpress, ale jeśli zapewnia on przechodzenie do automatycznego procesu generowania kolumn, można zrobić coś podobnego do tego, co zrobiłem dla siatki Telerik (http://geekswithblogs.net/sdorman/archive/2015/11/05/kendo-grid-mvc-wrapper-automatic-column-configuration.aspx).

W tym rozwiązaniu, stworzyłem atrybut niestandardowy dane adnotacji (podobny do tego):

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

Następnie udekorować swój model wyświetlania:

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

wreszcie w kodzie, który dostaje wywołany z haka generowania kolumn, można zrobić coś podobnego do tego:

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

To wygląda tak jak możesz to zrobić, używając obsługiwanego interfejsu API i metody przedłużania With<T> i/lub ewentualnie podpinania się do zdarzenia RowCellStyle. (https://documentation.devexpress.com/#WindowsForms/CustomDocument18017)

Jeśli nie możesz podłączyć się do procesu generowania kolumn, możesz zrobić to samo, ale używając własnej metody rozszerzenia, która zostanie wywołana po związaniu siatki, tak jak robisz z dzwonieniem pod numer BestFitColumns().

Powiązane problemy