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

.net – 为什么在使用带有AutoGenerateColumns =“True”的DataG

发布时间:2020-12-14 05:47:51 所属栏目:Java 来源:网络整理
导读:我正在使用 WPF DataGrid绑定到自定义类的集合.在网格XAML中使用AutoGenerateColumns =“True”,网格被创建并填充得很好,但标题是属性名称,正如人们所期望的那样. 我试过指定 Display(Name:="My Name") 从System.ComponentModel.DataAnnotations命名空间,它
我正在使用 WPF DataGrid绑定到自定义类的集合.在网格XAML中使用AutoGenerateColumns =“True”,网格被创建并填充得很好,但标题是属性名称,正如人们所期望的那样.

我试过指定

<Display(Name:="My Name")>

从System.ComponentModel.DataAnnotations命名空间,它没有任何效果.我也试过了

<DisplayName("My Name")>

从System.ComponentModel名称空间,但标题仍然不受影响.

是否无法使用AutoGenerateColumns选项指定列标题?

解决方法

使用@ Marc的建议是解决方案的开始,但是它自己采用,AutoGenerated列仍然将属性名称作为标题.

要获取DisplayName,您需要添加一个例程(在后面的代码中)来处理GridAutoGeneratingColumn事件:

Private Sub OnGeneratingColumn(sender As Object,e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles Grid.AutoGeneratingColumn
    Dim pd As System.ComponentModel.PropertyDescriptor = e.PropertyDescriptor
    e.Column.Header = pd.DisplayName
End Sub

另一个更好的解决方案是使用ComponentModel.DataAnnotations命名空间并指定ShortName:

Public Class modelQ016
    <Display(shortname:="DB Name")>
    Public Property DBNAME As String
    ...

OnGeneratingColumn成为:

Dim pd As System.ComponentModel.PropertyDescriptor = e.PropertyDescriptor
        Dim DisplayAttrib As System.ComponentModel.DataAnnotations.DisplayAttribute =
            pd.Attributes(GetType(ComponentModel.DataAnnotations.DisplayAttribute))
        If Not DisplayAttrib Is Nothing Then
            e.Column.Header = DisplayAttrib.ShortName
        End If

请注意,属性数组中属性的顺序会发生变化,因此您必须使用GetType(…)而不是数字参数……这样的乐趣!

(编辑:李大同)

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

    推荐文章
      热点阅读