c# – 列宽的数据注释

前端之家收集整理的这篇文章主要介绍了c# – 列宽的数据注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将一组对象绑定到DevExpress GridControl,并使用 15.1 Data Annotations自定义外观.但是我很难找到关于设置属性的列大小的任何内容.这是否可以通过注释?

注解类:

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

解决方法

开箱即用的数据注释属性不能用于指定UI网格的列大小. 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和“< T>扩展方法和/或可能挂钩到RowCellStyle事件. (https://documentation.devexpress.com/#WindowsForms/CustomDocument18017)

如果您无法挂接到列生成过程中,您可能会做同样的事情,但使用自己的扩展方法,在网格绑定后调用,就像您在调用BestFitColumns()时一样.

猜你在找的C#相关文章