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"

Preguntas similare

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"
Respuesta Responder a este mensaje
#2 SqlRanger
17/01/2005 - 10:36 | Informe spam
Aún más simple y con menos código sería usando un DataView.

Podrías tener un dataview en diseño, cuya propiedad "table" fuera "contacto"
y su propiedad "sort" fuera "CodEmpresa". Si no se puede tener en diseño
podrías crear el dataview en código. El dataview sólo hay que crearlo una
vez, así que lo declararíamos a nivel de clase y lo instanciaríamos en el
evento load:

Public Class ElFormulario
Inherits Form

' ..

Private dv As DataView

'..

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.UserControl11.GestionarTeclas()
dv = New DataView(ds.Tables("contacto"), "", "CodEmpresa",
DataViewRowState.CurrentRows)
End Sub

' .

End Class

Luego se utilizaría ese dataview para crear otro con los registros de
detalle:

Dim index As Integer = dv.Find(LBLotoCod_empresa.Text)
Dim rv As DataRowView = dv(index)
Dim dv2 As DataView = rv.CreateChildView("empresa-contacto")
Me.LBContactos.DataSource = dv2
Me.LBcontactos.DisplayMember = "nombre"
Me.LBcontactos.ValueMember = "cod_contacto"

Saludos:

Jesús López
MVP




"SOLUCION" escribió en el mensaje
news:
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"
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida