none
PropertyGrid array DataColumns, mostrar nombre.

    Pregunta

  • Hola:

    A raíz de la pregunta: https://social.msdn.microsoft.com/Forums/es-ES/3d267290-37da-43b4-bb87-aefb36ce844a/propertygrid-collection-datatables-mostrar-tablename-en-la-parte-izquierda?forum=vbes

    he realizado lo siguiente pero me falta un último paso. Tengo una clase generica para Collections:

    ''' <summary>
    ''' Clase generica que permite cambiar la descripcion para DataTables/DataRelations
    ''' </summary>
    Public Class CollectionEditor_EX
        Inherits CollectionEditor
    
        Public Sub New(q As Type)
            MyBase.New(q)
        End Sub
        Protected Overrides Function GetDisplayText(value As Object) As String
            Dim dt = TryCast(value, DataTable)
            If dt Is Nothing Then
                Dim dr = TryCast(value, DataRelation)
                If dr Is Nothing Then
                    Return value.ToString
                Else
                    Return dr.RelationName
                End If
            Else
                Return dt.TableName
            End If
        End Function
    End Class

    La cual 'añado' a las colecciones que me interesan de un dataset, para ello creo una clase 'extendida:

    ''' <summary>
    ''' Creamos una clase EXTENDIDA para modificar los Editores por defecto
    ''' </summary>
    Public Class DataSet_EX
        Inherits DataSet
    
        Public Sub New(Nombre As String)
            MyBase.New(Nombre)
        End Sub
    
        <Editor(GetType(CollectionEditor_EX), GetType(UITypeEditor))>
        Public Overloads ReadOnly Property Tables() As DataTableCollection
            Get
                Return MyBase.Tables
            End Get
        End Property
    
        <Editor(GetType(CollectionEditor_EX), GetType(UITypeEditor))>
        Public Overloads ReadOnly Property Relations() As DataRelationCollection
            Get
                Return MyBase.Relations
            End Get
        End Property
    End Class

    Con esto he conseguido que las propiedades Tables y Relations muestren lo que quiero:

    Pero ahora quiero llegar más lejos y hacer lo mismo con ChildColumns, donde me muestra solo los indices, y me gustaría mostrar las columnas que lo componen. Para ver mejor lo que quiero, con este código en un formulario con un PropertyGrid:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim ds As New DataSet_EX("Prueba")
    
            Dim dt As New DataTable("Tbl1")
            Dim dc1 = dt.Columns.Add("Id", GetType(Integer))
            dt.Columns.Add("DSC", GetType(Integer))
    
            ds.Tables.Add(dt)
    
            dt = New DataTable("Tbl2")
            Dim dc2_1 = dt.Columns.Add("Id", GetType(Integer))
            Dim dc2_2 = dt.Columns.Add("Id2", GetType(Integer))
            dt.Columns.Add("DSC", GetType(Integer))
            ds.Tables.Add(dt)
    
            dt = New DataTable("Tbl3")
            Dim dc3_1 = dt.Columns.Add("Id", GetType(Integer))
            Dim dc3_2 = dt.Columns.Add("Id2", GetType(Integer))
            dt.Columns.Add("DSC", GetType(Integer))
            ds.Tables.Add(dt)
    
            Dim dr As New DataRelation("rel", dc1, dc2_1)
            ds.Relations.Add(dr)
    
            dr = New DataRelation("rel2", New DataColumn() {dc2_1, dc2_2}, New DataColumn() {dc3_1, dc3_2})
            ds.Relations.Add(dr)
    
            PropertyGrid1.SelectedObject = ds
        End Sub

    Entrando en Relaciones, seleccionamos "rel2", desplegamos ChildColumns y obtenemos esto:

    Es en ChildColumns donde quiero mostrar los nombres de los campos, incluso cambiar la descripción por defecto.

    Un saludo


    • Editado LG DES lunes, 24 de octubre de 2016 12:19
    • Cambiado Enrique M. Montejo jueves, 20 de julio de 2017 10:37 Pregunta relacionada con objetos de acceso a datos.
    lunes, 24 de octubre de 2016 12:18

Todas las respuestas