Gridview con header dato da INFORMATION_SCHEMA.COLUMNS

martedì 07 luglio 2009 - 16.16

valerik Profilo | Junior Member

Ciao a tutti,

vorrei creare una gridview automatizzata, valida per tutte le tabelle che ho a disposizione.
Quindi a partire dal nome di una tabella, vorrei visualizzare una gridview con nomi delle colonne uguali ai campi e i relativi record come dati.
Come si potrebbe fare?
Ho pensato che con

SELECT column_name from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@tablename

potrei riprendermi i nomi delle colonne da utilizzare come header. Ma come puo' essere integrato in una gridview?

Potete darmi una mano?Oppure c'e' qualche altro modo?

Grazie


valerik

amdbook Profilo | Junior Member

Utilizzando la proprietà AutoGenerateColumns del controllo GridView impostato a true, puoi scrivere una funzione del tipo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Dove tableName è una variabile che indica il nome della tabella (su database) dalla quale recuperare i dati da visualizzare mediante GridView

>>Pietro Libro
Blog: http://blogs.ugidotnet.org/PietroLibroBlog/

valerik Profilo | Junior Member

Ok, perfetto e se volessi nascondere uno dei campi?
Io ho provato in questo modo richiamando la proprieta' OnRowCreated

protected void gwTable_RowCreated(object sender, GridViewRowEventArgs e) { foreach (TableCell cell in e.Row.Cells) { BoundField field = (BoundField)((DataControlFieldCell)cell).ContainingField; if (field.DataField == "id") { field.Visible = false; } } }

ma mi ritorna il seguente errore:
Unable to cast object of type 'System.Web.UI.WebControls.TemplateField' to type 'System.Web.UI.WebControls.BoundField'.

valerik

amdbook Profilo | Junior Member

Dovresti utilizzare l'evento DataBoud del GridView. Il codice dovrebbe essere del tipo:

protected void GridView1_DataBound(object sender, EventArgs e) { foreach (TableCell cell in GridView1.HeaderRow.Cells ) { if (cell.Text.Equals("id")) cell.Visible = false; } }

>>Pietro Libro
Blog: http://blogs.ugidotnet.org/PietroLibroBlog/

valerik Profilo | Junior Member

Ciao,
Ho provato il tuo esempio, ma mi nasconde solo il testo dell' header, avrei bisogno di nascondere tutta la colonna relativa.

Grazie ancora per le risposte.
valerik

amdbook Profilo | Junior Member

Scusa, avevo dimenticato le righe. Il codice completo è questo:

for(int i=0;i<GridView1.HeaderRow.Cells.Count;i++) { if(GridView1.HeaderRow.Cells[i].Text.Equals ("id")){ GridView1.HeaderRow.Cells[i].Visible = false; foreach (GridViewRow row in GridView1.Rows) { row.Cells[i].Visible = false; } break; } }

>>Pietro Libro
Blog: http://blogs.ugidotnet.org/PietroLibroBlog/

valerik Profilo | Junior Member

Grande, perfetto, grazie.
valerik
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5