none
Asignar entero a datacolumn Tipo MiEstructura RRS feed

  • Pregunta

  • Tengo un : Structure

    Structure cEntidad
    
        Private IntID As Integer
    
        Public Shared Widening Operator CType(v As Integer) As GcEntidad
    
            Return New GcEntidad(v)
    
        End Operator
    
        Public Sub new(intID As Integer)
    
            Me.IntID = IntID
     
        End Sub
    
    End Structure

    Y un formulario de prueba con un datatable

    Public Class Form2 Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim MyEntidad As cEntidad = 1 Dim dtTabla As New DataTable

    dtTabla.Columns.Add("Cadena", GetType(String)) dtTabla.Columns.Add("Entidad", GetType(cEntidad)) Dim drNewFila As DataRow = dtTabla.NewRow drNewFila!Cadena= 1 drNewFila!Entidad = 1 End Sub End Class

    Tengo un datatable con dos columnas, Cadena y Entidad. lo que quiero es que al pasarle un integer a un datarow en la fila Entidad ese Integer Se Convierta a Entidad. asi como pasa cuando a pasarle un Integer a un datarow en la columna Cadena ese Integer se vuelve string.

    al mi Structure no convertir el tipo de dato automaticamente me sale un error por tipo de dato y no uso un ctype(1, cEntidad) porque al hacer un Select a una DB no podre usar el Ctype.

    tambien arriba en el Structure tengo un Operator que funciona correctamente en la linea ("Dim MyEntidad As cEntidad = 1") y es lo que quiero que haga en el datarow pero no lo hace.


    lunes, 5 de octubre de 2020 20:35

Todas las respuestas

  • Hola Antser Rodriguez, 

     

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Eric Ruiz

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 5 de octubre de 2020 23:32
    Moderador
  • Para poder asignar un Integer a tu Structure, tendrías que añadir en su interior un operador de tipo Widening. Al menos esto funciona con un Class, nunca he probado con un Structure.

    Más o menos tendría un aspecto parecido a lo siguiente (pero está sin probar, seguramente tendrás que "pulirlo" un poco):

    Public Shared Widening Operator CType(ByVal valor As Integer) As cEntidad
        Return New cEntidad(valor)
    End Operator



    martes, 6 de octubre de 2020 8:12
  • Exacto ya agrege el Operator Ctype pero no funciona al intentar asignar el valor en un datarow en el datacolumn Tipo cEntidad. es como que no se convierte al tipo de datos, de hecho en el codigo adjunto a la pregunta esta ese metodo agregado.

    la diferencia esta en que intento colocarlo en una columna tipo cEntidad de un datarow.
    martes, 6 de octubre de 2020 13:04
  • ¡Ups! Tienes razón, efectivamente ya está el método en tu código.

    Se me ocurre una posible razón para que no funcione: es el hecho de que has usado un Structure en lugar de un Class.

    Probablemente la implementación interna del DataRow lo trate como un Object, y cuenta con la herencia de clases para que las conversiones se realicen debidamente en la clase que hayas metido dentro del Object. Pero los Struct no tienen herencia; la herencia solo funciona con Class. Para tratar de aislar el problema, prueba a cambiar provisionalmente Structure  por Class, a ver si así funciona.

    martes, 6 de octubre de 2020 13:30
  • Lamentablemente da el mismo error al poner class en vez de structure por tipo de datos diferentes.

    estoy buscando entre la interfaces y la que mas me parece que podria funcionar es IDataObject que genera varios metodo de GetData, SetData y Format aunque creo que debe haber una interfaces como IColumnMapping pero para datarow. Tambien intente con IConvertible y Reflection.IReflect que me trae metodos para la conversion y metodos para asignar field o campo.

    XD solo ando explorando a ver si doy con la solucion porque aunque no logro que se ejecute un evento de conversion de estos igualmente da la sensacion de que es por ahi.
    martes, 6 de octubre de 2020 13:48
  • Aun no encuentro la solucion a este problema u objetivo lamentablemente :( y solo escribo para que otros se motiven a contestar y el hilo no muera sin respuesta en lo que busco y/o encuentro una respuesta.

    jueves, 15 de octubre de 2020 17:27