DataGrid y Dataset con relaciones

15/12/2004 - 16:58 por Gonzalo Díaz | Informe spam
Buenas...

Tengo una consulta para los expertos en ADO.
Ya busque la solucion a este problema en libros y no la encuentro...
El problema es el siguiente:

Tengo 2 DataTables: en un Dataset:
Profesionales:
IDProfesional Int
Nombre String
Turnos:
IDTurno Int
IDProfesional Int
Fecha Datetime
Las datatables estan relacionadas por el campo IDProfesional.

Tambien hay un DataGrid que esta bindeado con "Turnos", por lo tanto la
grilla me esta mostrando los 3 campos de la tabla "Turnos".
Como puedo hacer para que en la grilla me aparezca el campo "Nombre" de la
tabla "Profesionales" en vez del "IDProfesional" de la tabla "Turnos" ???

Desde ya muchas gracias !
Saludos !!!!

Preguntas similare

Leer las respuestas

#1 Imac_Man
15/12/2004 - 17:42 | Informe spam
ok como el caso es que tienes pegado el grid a un table "Tnurnos" de un
dataset, puedes hacer lo siguiente, en lugar de llenar el table con la tabla
simple, relacionala antes con la tabla de Profesiones, asi:

strCadena = " select cast(a.idProfesional as varchar) + '-' + b.Nombre,
a.IdTurno, a.Fecha from Turnos as a, Profesionales as b"
strCadena &= " where b.idProfesional = a.idProfesional"

luego llenas el datatable asi (supondremos que ya tenemos la conexion)
dim Comando as new sqlclient.slqCommand
dim Adaptador as new sqlclient.sqlDataAdapter
dim DS as new DataSet

Comando.CommandText = strCadena
Comando.connection = Conexion
Adaptador.SelectCommand = Comando
Adaptador.Fill(DS,"Turnos")

DataGrid1.DataSource = Ds.Tables("Turnos")

con esto obtendras una columna que te muestra tanto el codigo como el nombre
de ese profesional, si tienes mas dudas platicalas y veremos como las vamos
sacando, saludos


"Gonzalo Díaz" escribió en el mensaje
news:
Buenas...

Tengo una consulta para los expertos en ADO.
Ya busque la solucion a este problema en libros y no la encuentro...
El problema es el siguiente:

Tengo 2 DataTables: en un Dataset:
Profesionales:
IDProfesional Int
Nombre String
Turnos:
IDTurno Int
IDProfesional Int
Fecha Datetime
Las datatables estan relacionadas por el campo IDProfesional.

Tambien hay un DataGrid que esta bindeado con "Turnos", por lo tanto la
grilla me esta mostrando los 3 campos de la tabla "Turnos".
Como puedo hacer para que en la grilla me aparezca el campo "Nombre" de la
tabla "Profesionales" en vez del "IDProfesional" de la tabla "Turnos" ???

Desde ya muchas gracias !
Saludos !!!!


Respuesta Responder a este mensaje
#2 Gonzalo Díaz
15/12/2004 - 21:43 | Informe spam
Gracias...
Pero no puedo hace un Select uniendo las 2 tablas.
Estoy accediendo a un servicio y solo puedo obtener las dos tablas por
separado.
Mi idea es buscar alguna manera dentro del dataset que permita mapear
directamente el IDProfesional del datatable "Turnos" al IDProfesional del
datatable "Profesionales" y que el datagrid me muestre el campo "Nombre" en
vez de IDProfesional.

Espero que tengas alguna solucion.

Saludos !


"Imac_Man" escribió en el mensaje
news:
ok como el caso es que tienes pegado el grid a un table "Tnurnos" de un
dataset, puedes hacer lo siguiente, en lugar de llenar el table con la


tabla
simple, relacionala antes con la tabla de Profesiones, asi:

strCadena = " select cast(a.idProfesional as varchar) + '-' + b.Nombre,
a.IdTurno, a.Fecha from Turnos as a, Profesionales as b"
strCadena &= " where b.idProfesional = a.idProfesional"

luego llenas el datatable asi (supondremos que ya tenemos la conexion)
dim Comando as new sqlclient.slqCommand
dim Adaptador as new sqlclient.sqlDataAdapter
dim DS as new DataSet

Comando.CommandText = strCadena
Comando.connection = Conexion
Adaptador.SelectCommand = Comando
Adaptador.Fill(DS,"Turnos")

DataGrid1.DataSource = Ds.Tables("Turnos")

con esto obtendras una columna que te muestra tanto el codigo como el


nombre
de ese profesional, si tienes mas dudas platicalas y veremos como las


vamos
sacando, saludos


"Gonzalo Díaz" escribió en el mensaje
news:
> Buenas...
>
> Tengo una consulta para los expertos en ADO.
> Ya busque la solucion a este problema en libros y no la encuentro...
> El problema es el siguiente:
>
> Tengo 2 DataTables: en un Dataset:
> Profesionales:
> IDProfesional Int
> Nombre String
> Turnos:
> IDTurno Int
> IDProfesional Int
> Fecha Datetime
> Las datatables estan relacionadas por el campo IDProfesional.
>
> Tambien hay un DataGrid que esta bindeado con "Turnos", por lo tanto la
> grilla me esta mostrando los 3 campos de la tabla "Turnos".
> Como puedo hacer para que en la grilla me aparezca el campo "Nombre" de


la
> tabla "Profesionales" en vez del "IDProfesional" de la tabla "Turnos"


???
>
> Desde ya muchas gracias !
> Saludos !!!!
>
>


Respuesta Responder a este mensaje
#3 Nicolas L.
20/12/2004 - 18:13 | Informe spam
Las 2 tablas tienen que estar relacionadas en el Dataset en en una relación
1-a-muchos donde Profesionales es la tabla "padre" (Parent Table) y Turnos
es la tabla "hija" (Child Table). Lo que tenes q hacer es agregar una
columna extra a la tabla Turnos y definir la propiedad Expression de la sgte
forma:

Dim dcNombre As DataColumn

' Crea la columna
dcNombre = New DataColumn
With dcNombre
.DataType = System.Type.GetType("System.String")
.ColumnName = "Nombre"
.Expression = "Parent.Nombre"
End With

miDataSet.Table("Turnos").Columns.Add(dcNombre)

No te olvides incluir "Parent." en la propiedad Expression porque estas
haciendo referencia a la tabla padre desde la tabla hija.
Para hacer referencia a la tabla hija desde su tabla padre se debe anteponer
en cambio "Child." al nombre de la columna.
Despues solo queda definir un nuevo TableStyle en donde se muestren las
columnas seleccionadas.

Para ver el uso completo de la propiedad DataColumn.Expression (en inglés)
podés ir a:

http://msdn.microsoft.com/library/d...ntopic.asp

Nicolas L.

"Gonzalo Díaz" escribió en el mensaje
news:%
Gracias...
Pero no puedo hace un Select uniendo las 2 tablas.
Estoy accediendo a un servicio y solo puedo obtener las dos tablas por
separado.
Mi idea es buscar alguna manera dentro del dataset que permita mapear
directamente el IDProfesional del datatable "Turnos" al IDProfesional del
datatable "Profesionales" y que el datagrid me muestre el campo "Nombre"
en
vez de IDProfesional.

Espero que tengas alguna solucion.

Saludos !


"Imac_Man" escribió en el mensaje
news:
ok como el caso es que tienes pegado el grid a un table "Tnurnos" de un
dataset, puedes hacer lo siguiente, en lugar de llenar el table con la


tabla
simple, relacionala antes con la tabla de Profesiones, asi:

strCadena = " select cast(a.idProfesional as varchar) + '-' + b.Nombre,
a.IdTurno, a.Fecha from Turnos as a, Profesionales as b"
strCadena &= " where b.idProfesional = a.idProfesional"

luego llenas el datatable asi (supondremos que ya tenemos la conexion)
dim Comando as new sqlclient.slqCommand
dim Adaptador as new sqlclient.sqlDataAdapter
dim DS as new DataSet

Comando.CommandText = strCadena
Comando.connection = Conexion
Adaptador.SelectCommand = Comando
Adaptador.Fill(DS,"Turnos")

DataGrid1.DataSource = Ds.Tables("Turnos")

con esto obtendras una columna que te muestra tanto el codigo como el


nombre
de ese profesional, si tienes mas dudas platicalas y veremos como las


vamos
sacando, saludos


"Gonzalo Díaz" escribió en el mensaje
news:
> Buenas...
>
> Tengo una consulta para los expertos en ADO.
> Ya busque la solucion a este problema en libros y no la encuentro...
> El problema es el siguiente:
>
> Tengo 2 DataTables: en un Dataset:
> Profesionales:
> IDProfesional Int
> Nombre String
> Turnos:
> IDTurno Int
> IDProfesional Int
> Fecha Datetime
> Las datatables estan relacionadas por el campo IDProfesional.
>
> Tambien hay un DataGrid que esta bindeado con "Turnos", por lo tanto la
> grilla me esta mostrando los 3 campos de la tabla "Turnos".
> Como puedo hacer para que en la grilla me aparezca el campo "Nombre" de


la
> tabla "Profesionales" en vez del "IDProfesional" de la tabla "Turnos"


???
>
> Desde ya muchas gracias !
> Saludos !!!!
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida