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()
.
czy próbowałeś użyć StringLengthAttribute? – Overmachine