41 messaggi dal 09 gennaio 2012
Ciao a tutti
ho un datalist connesso con un SQldatasource e mostrando le schede anagrafiche che mi restituisce vorrei fare dei trattamenti ai dati
ma mi segnala un errore in questa riga

"Int32 punteggio = Convert.ToInt32(Eval("punteggio"));"

ecco il codice

<asp:datalist id="DataList1" runat="server" datakeyfield="PlayerID" datasourceid="SqlDataSource1"
RepeatColumns="4" CellPadding="10" EnableViewState="false">
<ItemTemplate>
<%
Int32 punteggio = Convert.ToInt32(Eval("punteggio"));
if (punteggio>100){
//mostro una certa immagine
}
else {
//mostro un altro tipo di immagini
}
Response.Write(punteggio);
%>
<img src="PlayerImages/<%#Eval("PictureURL") %>" id="imgGioc<%#Eval("PlayerID") %>" alt="" title="" style="float:left; border: none; margin-right: 10px;" height="110" />

<strong>
<asp:Label Text='<%# Eval("FirstName") %>' runat="server" id="FirstNameLabel"/>
<asp:Label Text='<%# Eval("LastName") %>' runat="server" id="LastNameLabel"/>
</strong>
<asp:Label Text='<%# Eval("Position") %>' runat="server" id="PositionLabel"/><br /><br />
Joined on<br />
<asp:Label Text='<%# Eval("DateJoined", "{0:dd-MMM-yy}") %>' runat="server" id="DateJoinedLabel"/><br />
</ItemTemplate>
</asp:datalist>
Che errore ti dà? Forse punteggio è nullo e quindi va in errore la Convert?

Ormai programmano tutti... ma la professionalità appartiene a pochi
41 messaggi dal 09 gennaio 2012
ti riporto un esempio simile:
mi dice che alla riga
"if (Eval("Position") == "Goalkeeper") {"

"I metodi di associazione dati come Eval(), XPath() e Bind() possono essere utilizzati solo nel contesto di un controllo con associazione a dati."


<ItemTemplate>
<img src="PlayerImages/<%#Eval("PictureURL") %>" id="imgGioc<%#Eval("PlayerID") %>" alt="" title="" style="float:left; border: none; margin-right: 10px;" height="110" />
<strong>
<asp:Label Text='<%# Eval("FirstName") %>' runat="server" id="FirstNameLabel"/>
<asp:Label Text='<%# Eval("LastName") %>' runat="server" id="LastNameLabel"/>
</strong>
<%if (Eval("Position") == "Goalkeeper") { %>
<asp:Label Text='<%# Eval("Position") %>' runat="server" id="PositionLabel"/><br /><br />
<%} %>
Aggiunto il<br />
<asp:Label Text='<%# Eval("DateJoined", "{0:dd-MMM-yy}") %>' runat="server" id="DateJoinedLabel"/><br />
</ItemTemplate>
Infatti Eval e simili possono essere usati solo con associazione dati, cioè con #: si tratta di sintassi comode da usare in quei casi. Non puoi fare un if di quel tipo, in stile asp, ti ricordo la separazione tra business logic e UI.
Risolvi mettendo sulla Label Visible='<%# ... %>'

Ormai programmano tutti... ma la professionalità appartiene a pochi
41 messaggi dal 09 gennaio 2012
Grazie per la risposta.
Ok, mi sembra di capire che sono ambiti diversi.
Allora ti faccio una domanda: se volessi, per ogni record trovato, esguire del codice personalizzato (esempio: se i punti sono >100 allora interroga una certa tabella del db ed estrai solo ....) come faccio a interagire con i controlli come datalist, GridView ecc. ?
In asp classico ho il pieno controllo del rendering finale e per ogni record trovato posso eseguire tutto il codice che voglio.
Non so se mi sono spiegato.
ciao
Il mio consiglio è il seguente. Nel code behind crei una funzione GridBind() che richiami all'occorrenza (OnLoad, PageIndexChanged...).
Esegui la query e ottieni una List<TuoRecord> miaLista.
myGrid.DataSource = miaLista;
myGrid.Databind();

quando esegui la query esegui join e where secondo le necessità ed estrai tutto ciò di cui hai bisogno.
A questo punto sei già ok. Nel caso di ulteriori elaborazioni, prima di effettuare l'associazione al DataSource, cicli gli elementi e assegni valori ad altre proprietà. Attenzione perché operazioni di questo tipo possono essere onerose dato che sei in un ciclo. Evita ad esempio ulteriori query se puoi farle a monte.
Valuta i tempi di esecuzione.
Ti ricordo che, in ultima analisi, puoi sempre passare a una paginazione lato sql server ed eseguire le elaborazioni su un numero limitato di record.

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.