Usuario
Asignar entero a datacolumn Tipo MiEstructura

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.
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.
-
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
- Editado Alberto PoblacionMVP martes, 6 de octubre de 2020 8:14
-
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. -
¡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.
-
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.- Editado Antser Rodriguez martes, 6 de octubre de 2020 13:50
-