Il datagrid è come ormai tutti sappiamo uno strumento molto potente per la visualizzazione di dati semplici o complessi.
Una sua caratteristica molto interessante, oltre alla possibilità di poter formattare le sue colonne dinamicamente, consiste nella possibilità di "costruirlo" a runtime, aggiungendo le colonne in base a condizioni da valutare al momento dell'esecuzione.
Inoltre a runtime è possibile sfruttare il metodo LoadTemplate fornito dalla classe Page, per caricare controlli più complessi ai quali associare dati.
Questo da' la possibilità al programmatore di poter visualizzare su uno stesso datagrid dati differenti a seconda delle necessità, come mostrare ad utenti diversi dati con struttura differente ma sempre della stessa base dati.
La pagina contiene un controllo Button per ogni utente, alla cui pressione viene generato l'evento Click. Si definiscono quali campi devono essere visualizzati per l'utente, assegnando anche uno stile particolare:
Private Sub bt_UserA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_UserA.Click Dim Campi(1) As String Campi(0) = "Nome" Campi(1) = "Cognome" dg_Clienti.CssClass = "Style_UserA" CaricaDG(Campi) End Sub
Successivamente viene chiamata la routine CaricaDG che genera gli oggetti BoundColumn o TemplateColumn (ed in questo caso carica anche il template) attraverso le funzioni AddBoundColumn e AddTemplateColumn:
Private Sub CaricaDG(ByVal Campi() As String)
Dim Cont As Int16
With dg_Clienti
'IMPOSTO IL CARICAMENTO MANUALE DELLE COLONNE DEL DATAGRID
.AutoGenerateColumns = False
'CARICO LE COLONNE SPECIFICHE A ECONDA DELL'UTENTE
For Cont = 0 To UBound(Campi)
Select Case Campi(Cont)
Case "Nome"
.Columns.Add(AddBoundColumn("Nome Cliente", _ dt_DatiClienti.Columns("Nome")))
Case "Cognome"
.Columns.Add(AddBoundColumn("Cognome Cliente", _ dt_DatiClienti.Columns("Cognome")))
Case "E_Mail"
.Columns.Add(AddTemplateColumn("E_MAIL", _ dt_DatiClienti.Columns("E_Mail"), "MailControl.ascx"))
Case "DataNascita"
.Columns.Add(AddBoundColumn("Data di Nascita", _ dt_DatiClienti.Columns("DataNascita")))
End Select
Next
'ESEGUO IL BINDIG
.DataSource = dt_DatiClienti
.DataBind()
End With
End Sub
Private Function AddBoundColumn(ByVal Etichetta As String, ByVal DataField_O As DataColumn) As Object
Dim C_new As New BoundColumn()
C_new.HeaderText = Etichetta
C_new.DataField = DataField_O.ColumnName ' Campo
C_new.Visible = True
'FORMATTO IL VALORE IN BASE AL TIPO
Select Case True
Case DataField_O.DataType Is GetType(System.DateTime)
C_new.DataFormatString = "{0:d}"
Case DataField_O.DataType Is GetType(System.String)
C_new.DataFormatString = "{0}"
End Select
AddBoundColumn = C_new
End Function
Private Function AddTemplateColumn(ByVal Etichetta As String, ByVal DataField_O As DataColumn, ByVal NomeTamplate As String) As Object
Dim CT_new As New TemplateColumn()
CT_new.HeaderText = "E_MAIL"
CT_new.Visible = True
'CARICO IL TEMPLATE
CT_new.ItemTemplate = Page.LoadTemplate(NomeTamplate)
AddTemplateColumn = CT_new
End FunctionOvviamente l'esempio è molto banale ma serve a come gestire totalmente il datagrid a runtime, costruendolo in base alle necessità che sorgono durante l'esecuzione dell'applicazione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.


