Ответ 1
Из коробки отсутствуют атрибуты аннотации данных, которые могут использоваться для указания размера столбца сетки пользовательского интерфейса. Атрибут 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()
.