如何合并2个数据属性并在DataGridView的单个列中显示它们?

时间:2016-08-25 08:22:47

标签: vb.net winforms datagridview

我想合并并在DataGridView的1列中显示2个数据字段。这在vb.net中怎么可能?

DataGridView有一个数据源。

1 个答案:

答案 0 :(得分:2)

您可以使用以下任一选项:

  • 为DataTable创建计算列
  • 为类创建只读属性
  • 处理DataGridView的CellFormatting事件

为DataTable创建计算列

如果数据字段属于DataTable,您可以将计算DataColumn添加到DataTable并设置其Expression属性,以根据这两列返回所需的值。

table.Columns.Add("DisplayName", GetType(String), "FirstName + ' ' + LastName")

为类创建只读属性

如果数据字段属于普通模型类,则可以在getter中添加只读属性,根据这2个属性返回所需的值。

Public Class Person
    Public Property FirstName As String
    Public Property LastName As String
    Public ReadOnly Property DisplayName As String
        Get
            Return String.Format("{0} {1}", FirstName, LastName)
        End Get
    End Property
End Class

使用DataGridView的CellFormatting事件

作为所有案例的一般解决方案,您可以使用DataGridView的{​​{3}}事件,并根据这两个字段将e.Value设置为所需的值。

Private Sub DataGridView1_CellFormatting(sender As Object,  _
    e As DataGridViewCellFormattingEventArgs Handles DataGridView1.CellFormatting
    ' For example you want to do it for 3rd column
    If e.ColumnIndex = 2 AndAlso e.RowIndex >= 0 Then   
        Dim row = Me.DataGridView1.Rows(e.RowIndex)
        'If DataSource is a DataTable, DataBoundItem is DataRowView
        Dim data = DirectCast(row.DataBoundItem, Person)
        e.Value = String.Format("{0} {1}", data.FirstName, data.LastName)
    End If
End Sub