165 messaggi dal 10 aprile 2001
Buongiorno.
Vorrei rifare in .net quello che avevo fatto in asp, ma via codice mi veniva molto facile, mentre con gli oggetti (da Visual Studio 2013) non avrei idea di come usarli per ottenere lo stesso risultato.

Do
response.write "<TR><TD ALIGN='center' BGCOLOR='cyan'><FONT COLOR='black'><STRONG>" & Rs("NomeServer") & "</STRONG></FONT></TD>"
'per il server in questione (Rs("NomeServer") cerco tutte le date di riavvio...dell anno corrente o precedente
If AnnoPrecedente = "True" Then
strSQL_2 = "SELECT * FROM RiavvioServers WHERE NomeServer = '" & Rs("NomeServer") & "' AND Year(DataRiavvio) =" & Year(Date())-1 & " ORDER BY DataRiavvio"
Else
strSQL_2 = "SELECT * FROM RiavvioServers WHERE NomeServer = '" & Rs("NomeServer") & "' AND Year(DataRiavvio) =" & Year(Date()) & " ORDER BY DataRiavvio"
End If
SET RS2 = Server.CreateObject("ADODB.Recordset")
RS2.Open strSQL_2, Conn, 1, 3
dim mese
mese = 1
Do
response.write "<TD ALIGN='center' BGCOLOR='yellow'>"
If not RS2.EOF then
response.write "<TABLE BORDER='1'>"
Do
If Month(RS2("DataRiavvio")) = mese Then
response.write "<TD ALIGN='center' BORDERCOLOR='green' TITLE='" & RS2("DataRiavvio") & "'><FONT COLOR='blue'><STRONG>" & Day(RS2("DataRiavvio")) & "</STRONG></FONT></TD>"
Else
Exit Do
End If
RS2.Movenext
Loop while Not RS2.EOF
response.write "</TABLE>"
End if
response.write "</TD>"
mese = mese + 1
Loop while mese < 13
Response.write "</TR>"
Rs.Movenext
Loop while Not Rs.EOF
Ciao,
non ho capito la domanda... vuoi tradurre in c#?
Oppure vuoi fare una programmazione più professionale utilizzando le classi?
Sei comunque già in una solution con un progetto web (Web FORMS o MVC) in una pagina (es. default.aspx)?

Ormai programmano tutti... ma la professionalità appartiene a pochi
165 messaggi dal 10 aprile 2001
No, voglio rifare la stessa cosa in ASP.NET con Visual Studio 2013: ovvero utilizzando gli Strumenti Standard a disposizione.
Farlo via codice, behind, è semplice perché "disegni" la tabella man mano che esegui i cicli; ma partendo da oggetti tipo GridView, Repeater, e così via: come si fa a fare la stessa cosa che avevo fatto via codice in asp?
In pratica ho una tabella (uno) che contiene i nomi dei server: quindi ogni record è un nome server (univoci). Poi ho una tabella (molti) che contiene tutti i riavvi che ho effettuato per ogni server (quindi la data di riavvio). Voglio rappresentare in formato tabellare la seguente situazione:
Nella prima colonna ci saranno i nomi dei server: uno per riga. E poi dovranno esserci 12 colonne (una per mese) dove all'interno di ogni campo verranno riportate tutte le date che corrispondono a quel mese, in cui c'è stato un riavvio del server indicato nella prima colonna della stessa riga.
Puoi usare una gridview se hai bisogno di struttura tabellare e paginazione (es. 100 server con paginazione a 20) oppure un Repeater per un elenco semplice.
Potresti anche usare solo un literal e popolarlo direttamente con tutto l'html che ti serve (come facevi in asp).
evito di dirti che potresti usare <% e usare qualcosa di molto simile all'asp.
Detto questo avrai sicuramente un tuo database con la struttura necessaria.
Nella tua pagina OnLoad (o Page_Load) chiami il binding dei dati.
Es.:
List<Server> tuaListaServe = // carica da db la lista dei server
tuaGrid.DataSource = tuaListaServer;
tuaGrid.DataBind();

e nel code behind:
 <asp:GridView  ID="grdRisultati" runat="server">
                <Columns>
                    <asp:TemplateField HeaderText="Server">
                        <ItemTemplate>
                            <asp:Label runat="server" ID="lbl1" Text='<%# ((Server)Container.DataItem)["NomeServer"]%>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
...

Ormai programmano tutti... ma la professionalità appartiene a pochi
165 messaggi dal 10 aprile 2001
Grazie, ma così gestisco solo la colonna NomeServer. E per tutti i dati da rappresentare mese per mese?
Puoi aggiungere un template field o un boundfield per ogni colonna della tua select (ovvero ogni proprietà della tua classe Server).

Ormai programmano tutti... ma la professionalità appartiene a pochi
3.939 messaggi dal 28 gennaio 2003
Guarda, per me stai sbagliando!
Io vengo dall'asp (già dimenticato da tempo). I controlli aspx.net li uso solo nei casi più semplici. Nei più complessi ritorno al vecchio, quello ereditato dall'asp.
Nel tuo caso, ti consiglio di usare la classe StringBuilder per archiviare, durante i cicli, l'html, per poi metterlo in un segnaposto sulla pagina.
Questa tecnica, a mio parere, è molto più semplice da implementare, anche nei casi più complessi, dove sarebbe arduo e illogico farlo coi "controlli standard".

ciao
165 messaggi dal 10 aprile 2001
Alla fine ho fatto così:

Protected Sub GridViewNomiServer_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridViewNomiServer.RowDataBound
Dim varNome As String = e.Row.Cells(0).Text
Dim varMese As Byte = 1
Dim varStrings As String = ""
If varNome <> "NomeServer" And varNome <> "" Then
Dim Connectionstr As String = "Data Source=xxxxxxxx\SQLEXPRESS;Initial Catalog=Calendario;Integrated Security=True;"
Do While varMese < 13
Dim queryString As String = "SELECT Data FROM dbo.Riavvio Where NomeServer='" & varNome & "' and Year(Data)=" & Year(Now) & " and Month(Data)= " & varMese & " Order by Data;"
Using connection As New SqlConnection(Connectionstr)
Dim command As New SqlCommand(queryString, connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
varStrings = varStrings + "<label Title='" & reader("Data") & "'><b>" + String.Format("{0}", Left(reader(0), 2)) + "</b></Label> "
End While
e.Row.Cells(varMese).Text = varStrings
varStrings = ""
reader.Close()
End Using
varMese = varMese + 1
Loop
End If
End Sub

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.