加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 列宽的数据注释

发布时间:2020-12-15 17:51:27 所属栏目:百科 来源:网络整理
导读:我将一组对象绑定到DevExpress GridControl,并使用 15.1 Data Annotations自定义外观.但是我很难找到关于设置属性的列大小的任何内容.这是否可以通过注释? 注解类: public class DataFeedback{ [Display(Name = "Row Num",Order = 0)] public int RowNum {
我将一组对象绑定到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()时一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读