DATALIST

08/07/2004 - 14:40 por Toni Font | Informe spam
Hola grupo,

Actualmente estoy realizando una biblioteca digital en la que se dan
opiniones sobre libros. El problema es que si un libro tiene relacionada una
opnion, se muestra la informacion del libro pero si este no tiene una
opinión relacionada, no se muestra nada. Alguien sabe como puedo
solucionarlo?

Para mostrar las opiniones utilizo un DataList que relleno desde HTML
utilizando DataBinder.Eval.

Gracias de antemano

Preguntas similare

Leer las respuestas

#6 Toni Font
08/07/2004 - 21:36 | Informe spam
Lo siento pero supongo que como yo tengo mucho lio tambien te habré liado a
ti.

Para Llenar el DataReader hago lo siguiente:

public String[] RetornaInfoLlibreDonatTitol(String parametre){


String[] cadenes = new String[10];

String var1,var2,var3,var4,var5,var6,var7,var8,var9,var10;

connexions c = new connexions();

SqlConnection conn = c.bdObre();

SqlCommand sqlcomm = c.commanda("Select count(tblOpinio.lngCodiLlibre) as
opns,tblLlibre.strISBN as ISBN,tblLlibre.intAnyEdicio as
publicacio,tblLlibre.strLlocEdicio as llocED,tblLlibre.strTitol as
titol,tblAutor.strNom as Nom, tblAutor.strCognoms as
cognom,tlkpIdioma.strIdioma as Idioma,tblCDU.strDescripcio as
materia,tlkpTipusLlibre.strTipus as tipus from tlkpTipusLlibre,tlkpIdioma,
tblLlibre, tblAutor,tblOpinio, tblCDU where tblOpinio.lngCodiLlibre tblLlibre.lngCodi and tblLlibre.lngCodiAutor=tblAutor.lngCodi and
tblLlibre.lngCodiTipus = tlkpTipusLlibre.lngCodi and tlkpIdioma.lngCodi tblLlibre.lngCodiIdioma and tblLlibre.strCDU = tblCDU.strCDU and strTitol
Like '"+parametre+"' GROUP BY
strISBN,intAnyEdicio,strLlocEdicio,strTitol,strCognoms,strIdioma,strDescripc
io,strTipus,strNom",conn);

SqlDataReader dr = c.dataReader();

dr=sqlcomm.ExecuteReader();



while (dr.Read())

{

var1=string.Copy(dr["ISBN"].ToString());

cadenes[0]=var1;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var2=string.Copy(dr["publicacio"].ToString());

cadenes[1]=var2;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var3=string.Copy(dr["llocED"].ToString());

cadenes[2]=var3;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var4=string.Copy(dr["titol"].ToString());

cadenes[3]=var4;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var5=string.Copy(dr["Nom"].ToString());

cadenes[4]=var5;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var6=string.Copy(dr["cognom"].ToString());

cadenes[5]=var6;

}

dr.Close();


dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var7=string.Copy(dr["Idioma"].ToString());

cadenes[6]=var7;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var8=string.Copy(dr["materia"].ToString());

cadenes[7]=var8;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var9=string.Copy(dr["tipus"].ToString());

cadenes[8]=var9;

}

dr.Close();

dr=sqlcomm.ExecuteReader();

while (dr.Read())

{

var10=string.Copy(dr["opns"].ToString());

cadenes[9]=var10;

}

dr.Close();

c.bdTanca(conn);

return cadenes;

}

I en el webform lleno los labels con cada posicion del array de strings
cadenes



Para llenar el DataSet hago lo siguiente:

public DataSet agafaDataSet (String Parametre){

connexions c = new connexions();

SqlConnection conn = c.bdObre();

SqlDataAdapter da = c.dataAdapter("SELECT * from
tblOpinio,tblLlibre,tblImatges where tblImatges.ID like
tblOpinio.lngCodiImatge and tblOpinio.lngcodiLlibre like tblLlibre.lngCodi
and tblLlibre.strTitol like '"+Parametre+"'", conn);

DataSet ds = new DataSet();

da.Fill(ds);

c.bdTanca(conn);

return ds;

}

Después en el webform, le hago

DataList1.datasource = ds
DataList1.dataBind()

I para mostrar los datos del data set hago lo siguiente:

<asp:datalist id="DataList1" runat"server">
<ItemTemplate>
<p>
Valoració:<asp:Image id="Image2" runat="server"
Width"72px" Height="12px" ImageUrl=' <%# DataBinder.Eval
(Container.DataItem, "pathImatge"%> '> </asp:Image><br>
Opinio: <%# DataBinder.Eval (Container.DataItem,
"memOpinio"%>
</p>
</ItemTemplate>
</asp:datalist>

Espero que este còdigo te haya ayudado a ver el problema, que a mi me lleba
de cabeza!!!

Muchas Gracias
Respuesta Responder a este mensaje
#7 Alejandro Perez
09/07/2004 - 21:59 | Informe spam
Epale Toni. Ok, vamos a hablar del datareader que es el
de los libros y el que esta ocasionando los problemas. En
lo que pude revisar en codigo note lo siguiente:

1.- Tienes una consulta muy larga alli a la cual le
concatenas el "parametre". Quizas esa consulta pueda
luego ocasionarte problemas y se te va a hacer dificil
encontrar donde estan los errores. Te recomiendo que
encapsules toda esa consulta en un Stored Procedure.
Luego le pasas el valor del parametro y tienes las cosas
un poco mas organizadas.

2.- Me parece que le estas dando un mal uso al metodo Read
() del dataReader, recuerda que este metodo lo que hace
es pasar al siguiente registro, no para capturar campos.
Trata de acomodar un poco esa parte, y para obtener los
valores de los campos te recomendo que utilices las
funciones d retorno d valores del DataReader.

Es decir que seria algo como:

while (dr.Read())

{
cadenes[0]=dr.GetString("ISBN");
cadenes[1]=dr.GetString("publicacio");
.
.
.
etc..


Avisame...
Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela



Lo siento pero supongo que como yo tengo mucho lio


tambien te habré liado a
ti.

Para Llenar el DataReader hago lo siguiente:

public String[] RetornaInfoLlibreDonatTitol(String


parametre){


String[] cadenes = new String[10];

String


var1,var2,var3,var4,var5,var6,var7,var8,var9,var10;

connexions c = new connexions();

SqlConnection conn = c.bdObre();

SqlCommand sqlcomm = c.commanda("Select count


(tblOpinio.lngCodiLlibre) as
opns,tblLlibre.strISBN as ISBN,tblLlibre.intAnyEdicio as
publicacio,tblLlibre.strLlocEdicio as


llocED,tblLlibre.strTitol as
titol,tblAutor.strNom as Nom, tblAutor.strCognoms as
cognom,tlkpIdioma.strIdioma as


Idioma,tblCDU.strDescripcio as
materia,tlkpTipusLlibre.strTipus as tipus from


tlkpTipusLlibre,tlkpIdioma,
tblLlibre, tblAutor,tblOpinio, tblCDU where


tblOpinio.lngCodiLlibre >tblLlibre.lngCodi and
tblLlibre.lngCodiAutor=tblAutor.lngCodi and
tblLlibre.lngCodiTipus = tlkpTipusLlibre.lngCodi and


tlkpIdioma.lngCodi >tblLlibre.lngCodiIdioma and tblLlibre.strCDU =
tblCDU.strCDU and strTitol
Like '"+parametre+"' GROUP BY
strISBN,intAnyEdicio,strLlocEdicio,strTitol,strCognoms,st


rIdioma,strDescripc
io,strTipus,strNom",conn);

SqlDataReader dr = c.dataReader();

dr=sqlcomm.ExecuteReader();



while (dr.Read())

{

var1=string.Copy(dr["ISBN"].ToString());

cadenes[0]=var1;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var2=string.Copy(dr["publicacio"].ToString());

cadenes[1]=var2;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var3=string.Copy(dr["llocED"].ToString());

cadenes[2]=var3;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var4=string.Copy(dr["titol"].ToString());

cadenes[3]=var4;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var5=string.Copy(dr["Nom"].ToString());

cadenes[4]=var5;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var6=string.Copy(dr["cognom"].ToString());

cadenes[5]=var6;

}

dr.Close();


dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var7=string.Copy(dr["Idioma"].ToString());

cadenes[6]=var7;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var8=string.Copy(dr["materia"].ToString());

cadenes[7]=var8;

}

dr.Close();

dr=sqlcomm.ExecuteReader();


while (dr.Read())

{

var9=string.Copy(dr["tipus"].ToString());

cadenes[8]=var9;

}

dr.Close();

dr=sqlcomm.ExecuteReader();

while (dr.Read())

{

var10=string.Copy(dr["opns"].ToString());

cadenes[9]=var10;

}

dr.Close();

c.bdTanca(conn);

return cadenes;

}

I en el webform lleno los labels con cada posicion del


array de strings
cadenes



Para llenar el DataSet hago lo siguiente:

public DataSet agafaDataSet (String Parametre){

connexions c = new connexions();

SqlConnection conn = c.bdObre();

SqlDataAdapter da = c.dataAdapter("SELECT * from
tblOpinio,tblLlibre,tblImatges where tblImatges.ID like
tblOpinio.lngCodiImatge and tblOpinio.lngcodiLlibre like


tblLlibre.lngCodi
and tblLlibre.strTitol like '"+Parametre+"'", conn);

DataSet ds = new DataSet();

da.Fill(ds);

c.bdTanca(conn);

return ds;

}

Después en el webform, le hago

DataList1.datasource = ds
DataList1.dataBind()

I para mostrar los datos del data set hago lo siguiente:

<asp:datalist id="DataList1" runat"server">
<ItemTemplate>
<p>
Valoració:<asp:Image id="Image2"


runat="server"
Width"72px" Height="12px" ImageUrl=' <%# DataBinder.Eval
(Container.DataItem, "pathImatge"%> '> </asp:Image><br>
Opinio: <%# DataBinder.Eval


(Container.DataItem,
"memOpinio"%>
</p>
</ItemTemplate>
</asp:datalist>

Espero que este còdigo te haya ayudado a ver el


problema, que a mi me lleba
de cabeza!!!

Muchas Gracias


.

Respuesta Responder a este mensaje
#8 Toni Font
10/07/2004 - 00:45 | Informe spam
Hola Alejandro, me he fijado que los mètodos que me comentas, del getString,
no funcionan pasando un STRING sino que la especificación del método es la
siguiente:
dr.GetString(int i)
Este entero sabes a que se refiere?
Respuesta Responder a este mensaje
#9 Toni Font
10/07/2004 - 01:17 | Informe spam
Hola Alejandro!!
Ya esta todo solucionado!! cuando hacia el count en la select tenia
problemas y mostraba lo que quería. Ahora, le hago el count desde otro lado
y funciona a la perfeccion!!
Muchas gracias por todo y ya sabes a quien voy a recurri si tengo otro
problema, y bueno, si tu tienes alguno de sencillo o no tan sencillo y lo
quieres comentar a lo mejor te lo arreglo!!!
Respuesta Responder a este mensaje
#10 Octavio Hernandez
10/07/2004 - 03:50 | Informe spam
Toni,

Normalmente ese método está sobrecargado para permitirte indicar tanto el
nombre del campo (string) como su posición en la secuencia de campos (int).

Slds,

Octavio

"Toni Font" escribió en el mensaje
news:%
Hola Alejandro, me he fijado que los mètodos que me comentas, del


getString,
no funcionan pasando un STRING sino que la especificación del método es la
siguiente:
dr.GetString(int i)
Este entero sabes a que se refiere?


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida