Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2010, 17:02
efilnikefusin
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 12 años, 7 meses
Puntos: 0
Problema con ListView y SqlDataReader

Hola, estamos haciendo una aplicación en ASP.NET y tengo un problema. Estoy mostrando unas noticias de la base de datos, en una tabla Noticias tengo cada noticia y su clave ajena al Cliente (usuario que la escribió). Los Comentarios los tengo en otra tabla, con una clave ajena a Noticia (para saber a que noticia va el comentario) y otra a Cliente (para saber el Cliente que lo ha escrito).

Bien, para mostrar utilizo un SqlDataSource y un ListView. En el ListView cojo los datos con "<%#Eval(nombredelacolumna)%>" para imprimirlos. Hasta aquí todo bien:

Cita:
<asp:SqlDataSource ID="SqlDSNoticias" runat="server"
ConnectionString="<%$ ConnectionStrings:BDOdisea %>" SelectCommand="SELECT TOP (100) PERCENT dbo.Noticia.noticia_id, dbo.Noticia.titular, CONVERT(varchar(10), dbo.Noticia.fecha, 103) AS SoloFecha, dbo.Noticia.mensaje, { fn CONCAT(dbo.Cliente.nombre + ' ', dbo.Cliente.apellido) } AS Nombre, dbo.Noticia.cliente_id, dbo.Cliente.usuario FROM dbo.Noticia INNER JOIN dbo.Cliente ON dbo.Noticia.cliente_id = dbo.Cliente.cliente_id ORDER BY SoloFecha DESC" >
</asp:SqlDataSource>

<asp:ListView ID="LVNoticias" runat="server" DataSourceID="SqlDSNoticias" >
<LayoutTemplate>
<div runat="server" id="itemPlaceholder" style="border:1px solid;">

</div>

</LayoutTemplate>
<ItemTemplate>
//Aqui muestro los datos de la noticia. Quito el codigo porque es un engorro
Pero ahora lo que quiero es, para cada una de esas noticias, imprimir los comentarios de esa noticia. Lo que he hecho es meter un ListView y otro SqlDataReader dentro del que ya tengo (esto es lo que sigue al código anterior)

Cita:
//NUEVO SQLDATASOURCE PARA LOS COMENTARIOS
<asp:SqlDataSource ID="SqlDSComentariosNoticia" ConnectionString="<%$ ConnectionStrings:BDOdisea %>" runat="server" SelectCommand="SELECT ComentariosNoticia.comentario_id, ComentariosNoticia.cliente_id, ComentariosNoticia.noticia_id, ComentariosNoticia.texto, Cliente.usuario FROM ComentariosNoticia INNER JOIN Cliente ON ComentariosNoticia.cliente_id = Cliente.cliente_id INNER JOIN Noticia ON ComentariosNoticia.noticia_id = Noticia.noticia_id WHERE ComentariosNoticia.noticia_id=<%# Eval("noticia_id")%>">
</asp:SqlDataSource>
<div class="comentarios">
//NUEVO LISTVIEW
<asp:ListView ID="LVComentariosNoticias" runat="server" DataSourceID="SqlDSComentariosNoticia" >
<LayoutTemplate>
<div runat="server" id="itemPlaceholder" style="border:1px solid;">
</div>
</LayoutTemplate>
<ItemTemplate>
<p class="usuarioNoticia">enviada por </p>
<asp:Label ID="Label1" runat="server" CssClass="usuarioNoticia"
Text='<%#Eval("usuario") %>' />
<br />
<asp:TextBox ID="TBMensaje" runat="server" Height="30px" TextMode="MultiLine"
Width="292px" CssClass="nuevaNoticia" Text='<%#Eval("texto") %>' Enabled="false"></asp:TextBox>
</ItemTemplate>
</asp:ListView>
</div>
<br />
<br />
<br />
</ItemTemplate>
</asp:ListView>
Mi problema es, que para cada fila del ListView, necesito cambiar el SelectCommand del SqldataSource para ponerle la noticia_id de la noticia. He intentado a ponerle (al final de la select) lo que pone ahí, pero me falla justo en esa parte, como si no me dejara insertar código en la select:

Cita:
WHERE ComentariosNoticia.noticia_id=<%# Eval("noticia_id")%>
¿Alguna idea para solucionar eso? en ese <%# Eval("noticia_id")%> tengo que poner la ID de la noticia que estoy mostrando, pero peta justo en esa parte

Gracias, un saludo!