9 messaggi dal 28 agosto 2015
Ciao a tutti, dopo mille tentativi e ricerche in rete senza risultati utili, chiedo aiuto al forum, perchè proprio non riesco a trovare la soluzione.

Premetto che sono un autodidatta, quindi sicuramente avrò ignorato finora alcuni concetti fondamentali che mi avrebbero fatto capire dove sta l'errore.
Ma veniamo al problema: ho una pagina aspx che deve accedere ad alcuni dati di un database MS Access e mostrarli a video.
Come si può vedere dal codice i dati dovranno essere recuperati in due cicli distinti (loop1 e loop2, ovvero ciclo padre e ciclo figlio), in quanto successivamente dovranno essere associati a due distinte <div> con due distinte classi css.
Finora tutto bene, peccato che per le mie conoscenze non riesco ad applicare alcuno stile css ai response.write che ho utilizzato per recuperare i dati.
Studiando un po' in rete mi sembra di aver capito che non posso applicare una classe css direttamente ai response.write (o, meglio, non posso farlo con il loop presente nell'esempio), bensì dovrei appoggiarmi agli asp:literal o agli asp:panel o agli asp:placeholder
Ho effettuato dei test in tal senso, il problema è che il risultato è sempre il medesimo, ovvero non riesco a fare visualizzare i dati con la giusta gerarchia padre/figlio, ovvero vengono elencati prima tutti i padri (loop1) e poi tutti i figli (loop2).

Qualcuno di buona volontà riesce a darmi qualche aiuto?
Grazie mille a tutti.




<%@ Page Language="VB" %>

<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.OleDb"%>

<html>

<head runat="server">
<link rel="stylesheet" type="text/css" href="css/new_query4.css"/>
</head>

<script language="VB" runat="server">

Sub Page_Load(Sender As Object, e As EventArgs)

Dim MyConnection As OleDbConnection
Dim MyCommand, MyCommand2 As OleDbDataAdapter
dim MyDataset, MyDataset2 As DataSet
dim MyTable, MyTable2 As DataTable
dim loop1, numrows, loop2, numrows2 As Integer
dim sqlstr, sqlstr2 As String

sqlstr = "SELECT P_NAME, P_DESC FROM products WHERE P_NAME LIKE 'A%';"
sqlstr2 = "SELECT P_PDF FROM products WHERE P_NAME LIKE 'A%';"

MyConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=False; Data Source=.\database.mdb")

MyCommand = New OleDbDataAdapter(sqlstr, MyConnection)
MyCommand2 = New OleDbDataAdapter(sqlstr2, MyConnection)

MyDataset = New DataSet
MyCommand.Fill(MyDataset)
MyDataset2 = New DataSet
MyCommand2.Fill(MyDataset2)

MyTable = New DataTable
MyTable = MyDataset.Tables(0)
MyTable2 = New DataTable
MyTable2 = MyDataset2.Tables(0)

numrows = MyTable.Rows.Count
numrows2 = MyTable2.Rows.Count

If numrows = 0 then
Response.Write("<p>NESSUN RECORD.</p>")
Else
Response.Write("<p>" & Cstr(numrows) & " RECORD TROVATI.</p>")
For loop1 = 0 To numrows - 1

Response.Write(MyTable.Rows(loop1).Item("P_NAME") & " " & MyTable.Rows(loop1).Item("P_DESC") & "<br>")
If numrows2 = 0 then
Response.Write("<p>NESSUN RECORD.</p>")
Else

Response.Write("<p>" & Cstr(numrows2) & " RECORD TROVATI.</p>")
For loop2 = 0 To numrows2 - 1
Response.Write(MyTable2.Rows(loop2).Item("P_PDF") & "<br>")
Next loop2
End If
Response.Write("<p>FINE LOOP2.</p>")

Next loop1
End If
Response.Write("<p>FINE LOOP1.</p>")
End Sub
</Script>

</html>
3.939 messaggi dal 28 gennaio 2003
Ciao. Ti mostro un esempio su cui sto lavorando.
Primo, non uso Response.Write. Penso di non averlo mai usato con pagine aspx, ma solo con pagine asp.

Nel mio caso, ho un div con una tabella: debbo popolare (aggiungere, togliere) righe dalla tabella, sia lato client, sia lato server)

<div id="div_postazioni" >
  <table id="table_postazioni" style="width:100%;"><asp:Literal ID="Literal_table_postazioni" runat="server" EnableViewState="False"></asp:Literal></table>
</div>

come vedi, dentro <table> ho il controllo Literal che sarà popolato lato server.

Lato server, creo un buffer prima del ciclo:
Dim sb As New StringBuilder()

Lo popolo dentro il ciclo e, alla fine popolo il Literal:
Me.Literal_table_postazioni.Text = sb.ToString

ps. Naturalmente, lo StringBuilder si deve popolare con html valido, con classi, stile che più ti piace. Solo a titolo di esempio:
s = String.Format("<tr id=""tr_{0}""> <td class=""bordo_stazione""> <input name=""c_postazione"" type=""hidden"" value=""{0}"" />............
9 messaggi dal 28 agosto 2015
Ciao Pietro, grazie mille per la pronta risposta. Sicuramente approfondirò l'uso dei literal visto che mi offrono una maggiore flessibilità.

In ogni caso stanotte mi è venuta un'illuminazione malsana (e probabilmente poco elegante da un punto di vista di coding) che pensavo non avrebbe funzionato, invece....

Ne lascio traccia nel caso in cui possa servire a qualcun'altro; volendo fare i pigri si può risolvere con questo turn around:

response.write("<div class=""ciclo1"">")
Response.Write(MyTable.Rows(loop1).Item("P_NAME") & " " & MyTable.Rows(loop1).Item("P_DESC") & "<br>")
response.write("</div>")

in pratica si simula la presenza di un div e, di conseguenza, vi si può applicare una classe css.

Grazie ancora.
Saluti
3.939 messaggi dal 28 gennaio 2003
Beh, io davo per scondato che tu mettessi html, perciò div span e tutto il resto va più che bene.

Il tuo codice tradotto come faccio io è:

Dim sb As New StringBuilder()
sb.Append("<div class=""ciclo1"">")
sb.Append(MyTable.Rows(loop1).Item("P_NAME") & " " & MyTable.Rows(loop1).Item("P_DESC") & "<br>")
sb.Append("</div>")

Me.Literal1.Text = sb.ToString

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.