ASP.NET - Problemas con maestro-detalle

   
Vista:

Problemas con maestro-detalle

Publicado por Pableras (3 intervenciones) el 23/07/2008 20:39:51
Hola, qué tal ??

Estoy haciendo una página web de prueba para ver cómo funciona lo del maestro-detalle.

Antes de nada explicaré lo que quiero hacer:

Tengo una tabla maestro(paises) y otra detalle(usuarios). Utilizo 2 grids para mostrar los datos. En el grid maestro(paises) quiero que al pinchar en el botón "seleccionar" de una fila(he agregado la columna "seleccionar" en el grid mediante el "generador de propiedades") , me aparezcan en el grid detalle los usuarios que son de ese país.

Los campos clave de cada tabla son: en Paises el "id" y en Usuarios la "residencia"(id del país donde vive la persona)

Cuando ejecuto me sale el primer grid (paises) con su botón "seleccionar" en cada fila, pero al pinchar en "seleccionar" de alguno de esos paises, no ocurre nada (hace el post, pero ni siquiera aparece el grid detalle).

Alguien sabe si lo que tengo hasta ahora está bien ?? y qué tengo que poner en el dtgPaises_SelectedIndexChanged ??

Este es el código que tengo:

-----------------------------------------------------------------------------------------------------------------------

protected System.Web.UI.WebControls.DataGrid dtgPaises; // MAESTRO
protected System.Web.UI.WebControls.DataGrid dtgUsuarios; // DETALLE

-----------------------------------------------------------------------------------------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
string strCnn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\kedadas\db\kedadas.mdb";

OleDbConnection cnn=new OleDbConnection(strCnn);
OleDbDataAdapter daPaises=new OleDbDataAdapter("SELECT * FROM Paises",strCnn);
OleDbDataAdapter daUsuarios=new OleDbDataAdapter("SELECT * FROM Usuarios",strCnn);
DataSet ds=new DataSet();

daPaises.Fill(ds,"paises");
daUsuarios.Fill(ds,"usuarios");

DataRelation rel=new DataRelation("relacion", ds.Tables["paises"].Columns["id"], ds.Tables["usuarios"].Columns["residencia"]);

ds.Relations.Add(rel);

dtgPaises.DataSource=ds;
dtgPaises.DataMember="paises";
dtgPaises.DataBind();

dtgUsuarios.DataSource=ds;
dtgUsuarios.DataMember="paises.relacion";
}

-----------------------------------------------------------------------------------------------------------------------

private void dtgPaises_SelectedIndexChanged(object sender, System.EventArgs e)
{
// No tengo nada puesto aquí
}

-----------------------------------------------------------------------------------------------------------------------

Gracias de antemano

Un saludoooo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con maestro-detalle

Publicado por @vm (196 intervenciones) el 24/07/2008 19:41:34
lo puedes hacer desde el diseño, ejemplo:

Categorías:
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID" DataSourceID="SqlDSCategorias">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" InsertVisible="False"
ReadOnly="True" SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDSCategorias" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT [CategoryID], [CategoryName] FROM [Categories]"></asp:SqlDataSource>
<br />
<hr />
<br />
Detalle:
<br />
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="SqlDSProductos">
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"
ReadOnly="True" SortExpression="ProductID" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDSProductos" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT [ProductID], [ProductName], [CategoryName] FROM [Alphabetical list of products] WHERE ([CategoryID] = @CategoryID)">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="CategoryID" PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<br />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con maestro-detalle

Publicado por Pableras (3 intervenciones) el 27/07/2008 19:34:29
Gracias, pero el código HTML (vista HTML) resultante de los grids no me vale para mucho. Sé que será muy simple el hacerlo pero es que no sé mucho :-) ... En todo caso me valdrían los pasos hasta llegar ahí. Tengo Visual Studio .NET 2003, no sé si ese código valdría.

Alguna respuesta para hacerlo con código o en diseño pero con explicaciones ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con maestro-detalle

Publicado por Carlos Torrez (1 intervención) el 13/08/2008 15:49:25
itenta lo siguiente;

Private Sub gdConvenios_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles gdConvenios.EditCommand
dim idPais as string = e.Item.Cells(3).Text ' 3 pertenece al numero de
' columna del grid en el que se encuentra el id del pais
'luego:
Dim lsSql as String
lsSql = "SELECT * FROM DetallePaises WHERE idPais= " & idPais
' luego lo usas en tu consulta con el data adapter y demas chuchadas
'finalmente agregas al datagrid detalle
dgdetalle.datasource='datatable que obtuviste con la consulta'
dgdetalle.databind
End Sub

'es todo espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar