Аннотации данных для ширины столбца

Я привязываю коллекцию объектов к DevExpress GridControl и используя 15.1 Аннотации данных, чтобы настроить внешний вид. Однако я изо всех сил пытаюсь найти что-либо о настройке размера столбца для свойства. Возможно ли это с помощью аннотаций?

Класс с аннотациями:

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();

Ответ 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().

Ответ 2

Если вы посмотрите на эту страницу https://documentation.devexpress.com/#WindowsForms/CustomDocument114039

В разделе "Атрибуты проверки" имеется атрибут StringLength, где вы можете указать минимальное и максимальное количество символов данных, например.

[StringLength(20, MinimumLength = 3)]