Si puo' visualizzare un datagrid in modo che i nomi di colonna siano la prima cella di una riga
(cioe' invece che in flusso verticale, in flusso orizzontale)?
Si puo' visualizzare un datagrid in modo che i nomi di colonna siano la prima cella di una riga
(cioe' invece che in flusso verticale, in flusso orizzontale)?
press play on tape
-----
MP3 Listing
https://sourceforge.net/projects/mp3-listing
File Listing
https://sourceforge.net/projects/file-listing-2-0/
Originariamente inviato da djciko
Si puo' visualizzare un datagrid in modo che i nomi di colonna siano la prima cella di una riga
(cioe' invece che in flusso verticale, in flusso orizzontale)?:master:
![]()
costruendo l'html con un StringBuilder si farebbe in un attimo, ma col datagrid?boh! :master:
Pietro
<asp:GridView ID="GridView1" runat="server" ShowHeader="false"></asp:GridView>
le colonne sono tutte stringhe, perciò la formattazione date e numeri vanno fatte nell'evento databoud o simile (non ricordo)codice:Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim dt As DataTable = libreria.GetDataTable(StringaConnessioneTest, "SELECT * FROM REGIONI ORDER BY CODICE_ISTAT_REGIONE") dt = getDataTableReverse(dt) Me.GridView1.DataSource = dt Me.GridView1.DataBind() End Sub Public Function getDataTableReverse(ByVal dt As DataTable) As DataTable Dim t As New DataTable() t.Columns.Add("campo", GetType(String)) For i As Integer = 0 To dt.Rows.Count - 1 t.Columns.Add("valore_" & i, GetType(String)) Next For i As Integer = 0 To dt.Columns.Count - 1 Dim dr As DataRow = t.NewRow() dr(0) = dt.Columns(i).ColumnName For j As Integer = 0 To dt.Rows.Count - 1 dr(j + 1) = dt.Rows(j)(i) Next t.Rows.Add(dr) Next Return t End Function
![]()
Pietro
funziona, bella li'...stavo provando a scriverla anche in un altro modo. poi la posto...
press play on tape
-----
MP3 Listing
https://sourceforge.net/projects/mp3-listing
File Listing
https://sourceforge.net/projects/file-listing-2-0/
Originariamente inviato da djciko
funziona, bella li'...stavo provando a scriverla anche in un altro modo. poi la posto...
spicciati che la debbo mettere in libreria![]()
![]()
Pietro
Magari fra un po' nel banner in alto ci sarà il cd rom della storica libreria di Pietro....Originariamente inviato da pietro09
spicciati che la debbo mettere in libreria![]()
![]()
![]()
Sarebbe la manna per tutti i nuovi (ma anche gli altri) sviluppatori di net.
Il massimo per un nuovo programmatore, trovarsi con tutte le soluzioni pronte, create da uno che le usa per lavoro e, non per scrivere libri.
Ciao e buona domenica a tutti.
Legnetto
Originariamente inviato da Legnetto
Magari fra un po' nel banner in alto ci sarà il cd rom della storica libreria di Pietro....![]()
Sarebbe la manna per tutti i nuovi (ma anche gli altri) sviluppatori di net.
Il massimo per un nuovo programmatore, trovarsi con tutte le soluzioni pronte, create da uno che le usa per lavoro e, non per scrivere libri.
Ciao e buona domenica a tutti.
Legnetto
La mia filosofia è questa: quando trovo che una funzione sia riusabile, la spiaccico nella libreria.
E così tutte le soluzioni interessanti di questo forum e di quello javascript
![]()
![]()
Pietro
Dopo attenta riflessione ed il weekend rovinato su righe e colonne (a cena da amici pensavo all'aggiunta delle datarow) ho concluso che il modo piu' veloce e' questo, in Pietro-Style:
(all'inizio volevo fare un array di DataRow e poi ciclando in esso importarle nel datatable finale con NomeDataTable.ImportRow)
Il secondo parametro visualizza o meno la testata con i nomi dei campi...
codice:Public Function DataTableOrizzontale(ByVal dt As DataTable, ByVal AggiungiTestataVerticale As Boolean) As DataTable Dim DataTableGirato As New DataTable Dim indR As Integer = 0 If AggiungiTestataVerticale = True Then Dim NomiCampi As New DataColumn NomiCampi.ColumnName = "NOME CAMPO" NomiCampi.DataType = GetType(String) DataTableGirato.Columns.Add(NomiCampi) End If ' Preparo le colonne For Each riga As DataRow In dt.Rows Dim nuovacolonna As New DataColumn("COLONNA " & CStr(indR), GetType(String)) DataTableGirato.Columns.Add(nuovacolonna) indR += 1 Next For indColonne As Integer = 0 To dt.Columns.Count - 1 Dim nuovariga As DataRow = DataTableGirato.NewRow() Dim indPartenzaRighe = 0 If AggiungiTestataVerticale = True Then nuovariga(0) = "" & LCase(dt.Columns(indColonne).ColumnName) & "" indPartenzaRighe = 1 End If For indRighe As Integer = 0 To dt.Rows.Count - 1 nuovariga(indPartenzaRighe) = dt.Rows(indRighe)(indColonne) indPartenzaRighe += 1 Next DataTableGirato.Rows.Add(nuovariga) Next DataTableOrizzontale = DataTableGirato End Function
Per sdebitarmi della logica ti posto una funzione che ho fatto per esplorare un dataset prima di Bindarlo ad una griglia, magari va in libreria anche questa![]()
(basta usarlo con: libreria.esplora_dataset(nomedataset))
L'idea di Little Wood pero' non e' male. Cd Rom Asp.Net -tips dal mondo reale-codice:Public Shared Sub esplora_dataset(ByVal ds As DataSet) HttpContext.Current.Response.Write("<div style=""WIDTH:100%; BORDER-RIGHT: red thin solid; BORDER-TOP: red thin solid; BORDER-LEFT: red thin solid; BORDER-BOTTOM: red thin solid; BACKGROUND-COLOR: #fffff0""><center>NOME DATASET: " & ds.DataSetName) Dim iTabelle As Integer Dim iRighe As Integer Dim iColonne As Integer For iTabelle = 0 To ds.Tables.Count - 1 ' Nome della tabella corrente HttpContext.Current.Response.Write("<div style=""WIDTH:90%; BORDER-RIGHT: red thin solid; BORDER-TOP: red thin solid; BORDER-LEFT: red thin solid; BORDER-BOTTOM: red thin solid; BACKGROUND-COLOR: #ffffcc""><u>TABELLA: " & ds.Tables(iTabelle).TableName & "</u>") For iRighe = 0 To ds.Tables(iTabelle).Rows.Count - 1 HttpContext.Current.Response.Write(" <font color=red>RIGA N. " & iRighe & "</font> ") For iColonne = 0 To ds.Tables(iTabelle).Columns.Count - 1 HttpContext.Current.Response.Write("<u>NOME COLONNA</u>: " & UCase(ds.Tables(iTabelle).Columns(iColonne).ColumnName) & "<font color=red>/</font>") HttpContext.Current.Response.Write("<u>VALORE</u>: " & ds.Tables(iTabelle).Rows(iRighe)(iColonne) & " ") Next Next HttpContext.Current.Response.Write("</div> ") Next HttpContext.Current.Response.Write("</center></div>") End Sub
Il best dei programmatori di Html.it![]()
press play on tape
-----
MP3 Listing
https://sourceforge.net/projects/mp3-listing
File Listing
https://sourceforge.net/projects/file-listing-2-0/
mi piace l'idea di parametrizzare la funzione a seconda di volere o meno i nomi dei campi.
Ho però tolto la formattazione bold dei nomi dei campi perchè mi sembra limitativo. :master:
Per quanto riguarda i DataSet, non ricordo più l'ultima volta che li ho usati :master:
comunque la funzione è utile![]()
Pietro