como es más sencillo?DataSource de DataRow obtenido Getchildrows

14/01/2005 - 17:59 por Sergio | Informe spam
Despues de una mañana he sido incapaz de simplificar este codigo, necesito
que un listbox se visualize el nombre de un contacto, y que su valor (value)
sea el cod_contacto.
para eso tengo que cargar ese listbox con el el datasource, DisplayMember,
ValueMember. pero el array de filas que me devuelve el GetChildRows no lleva
consigo (o eso creo) los nombres de las columanas, para que me permitan el
enlace mediante el DisplayMember y ValueMember.
y he montado todo esto para que me funcion, pero no me he quedado nada
agusto.
¿alguien sabe de que manera se puede hacer?
he probado de todo, incluso a intentar asignar directamente
el array de filas al datasource e intentar acceder por el indice a al
DisplayMember y ValueMember, pero no he sido capaz.

Un saludo y gracias por todo.


'declaro variables
Dim fila As DataRow
Dim i As Short
Dim registros As DataRow()

'busco entre la clave principal
fila=DS.Tables("empresa").rows.find(LBLOCod_empresa.Text)
'obtendo de la relaccion las filas hijas
registros=fila.GetChildRows("empresa-contacto")

'Ahora creo una tabla porque si asigno directamente
'Me.LBcontactos.DataSource=registros(0).itemarray
'Me.LBcontactos.DisplayMember = "nombre"
'me.LBcontactos.ValueMember="cod_contacto"
'no existe lugar en el datarow donde relaccione el nombre
'los campos del datarow con "nombre" y "cod_contacto"
'

'creo la tabla,
Dim a As New DataTable

'creo las columnas
Dim c1 As New DataColumn
Dim c2 As New DataColumn
Dim c3 As New DataColumn
Dim c4 As New DataColumn
Dim c5 As New DataColumn
Dim c6 As New DataColumn

'las doy el nombre que coincida con el datarow
'devuelto por el GetChildRows, para luego usarlo
'en el DisplayMember, ValueMember.
c1.ColumnName="cod_contacto"
c2.ColumnName="cod_empresa"
c3.ColumnName="nombre"
c4.ColumnName="apellidos"
c5.ColumnName="puesto"
c6.ColumnName="cod_localidad"

'Añado las columnas a la tabla
a.Columns.Add(c1)
a.Columns.Add(c2)
a.Columns.Add(c3)
a.Columns.Add(c4)
a.Columns.Add(c5)
a.Columns.Add(c6)

'como solo se devulve una fila no hago el bucle
'introducco el datarow en la tabla.
a.Rows.Add(registros(0).itemarray)

'creo el enlace a datos
me.LBcontactos.DataSource=a
Me.LBcontactos.DisplayMember="nombre"
me.LBcontactos.ValueMember= "cod_contacto"
 

Leer las respuestas

#1 SOLUCION
17/01/2005 - 10:03 | Informe spam
Gracias a la inestimable ayuda de un amigo. he conseguido reducir el codigo.
hay que clonar la estructura de la tablas y asi no tengo que crearla. la
clave esta en esto "a = Ds.Tables("contacto").Clone"

Dim Fila As DataRow

Dim i As Short

Dim Registros() As DataRow

Dim a As New DataTable

a = Ds.Tables("contacto").Clone

Fila = Ds.Tables("empresa").Rows.Find(LBLotoCod_empresa.Text)

Registros = Fila.GetChildRows("empresa-contacto")

a.Rows.Add(Registros(0).ItemArray)

Me.LBContactos.DataSource = a

Me.LBcontactos.DisplayMember = "nombre"

Me.LBcontactos.ValueMember = "cod_contacto"


"Sergio" wrote:

Despues de una mañana he sido incapaz de simplificar este codigo, necesito
que un listbox se visualize el nombre de un contacto, y que su valor (value)
sea el cod_contacto.
para eso tengo que cargar ese listbox con el el datasource, DisplayMember,
ValueMember. pero el array de filas que me devuelve el GetChildRows no lleva
consigo (o eso creo) los nombres de las columanas, para que me permitan el
enlace mediante el DisplayMember y ValueMember.
y he montado todo esto para que me funcion, pero no me he quedado nada
agusto.
¿alguien sabe de que manera se puede hacer?
he probado de todo, incluso a intentar asignar directamente
el array de filas al datasource e intentar acceder por el indice a al
DisplayMember y ValueMember, pero no he sido capaz.

Un saludo y gracias por todo.


'declaro variables
Dim fila As DataRow
Dim i As Short
Dim registros As DataRow()

'busco entre la clave principal
fila=DS.Tables("empresa").rows.find(LBLOCod_empresa.Text)
'obtendo de la relaccion las filas hijas
registros=fila.GetChildRows("empresa-contacto")

'Ahora creo una tabla porque si asigno directamente
'Me.LBcontactos.DataSource=registros(0).itemarray
'Me.LBcontactos.DisplayMember = "nombre"
'me.LBcontactos.ValueMember="cod_contacto"
'no existe lugar en el datarow donde relaccione el nombre
'los campos del datarow con "nombre" y "cod_contacto"
'

'creo la tabla,
Dim a As New DataTable

'creo las columnas
Dim c1 As New DataColumn
Dim c2 As New DataColumn
Dim c3 As New DataColumn
Dim c4 As New DataColumn
Dim c5 As New DataColumn
Dim c6 As New DataColumn

'las doy el nombre que coincida con el datarow
'devuelto por el GetChildRows, para luego usarlo
'en el DisplayMember, ValueMember.
c1.ColumnName="cod_contacto"
c2.ColumnName="cod_empresa"
c3.ColumnName="nombre"
c4.ColumnName="apellidos"
c5.ColumnName="puesto"
c6.ColumnName="cod_localidad"

'Añado las columnas a la tabla
a.Columns.Add(c1)
a.Columns.Add(c2)
a.Columns.Add(c3)
a.Columns.Add(c4)
a.Columns.Add(c5)
a.Columns.Add(c6)

'como solo se devulve una fila no hago el bucle
'introducco el datarow en la tabla.
a.Rows.Add(registros(0).itemarray)

'creo el enlace a datos
me.LBcontactos.DataSource=a
Me.LBcontactos.DisplayMember="nombre"
me.LBcontactos.ValueMember= "cod_contacto"

Preguntas similares