view

Mattepuffo's logo
Riempire GridView da code-behind in C#

Riempire GridView da code-behind in C#

Il controllo server GridView (GV) è uno dei controlli più utlizzati in ambito Asp.NET per rappresentare i dati in forma tabellare.

Volendo è possibile controllarla senza scrivere una riga di codice, ma qui vi spiegherò come fare scrivendo tutto a mano usando il C#.

Prima di tutto creiamo aggiungiamo una GV alla pagina; vi posto la mia:

<asp:GridView ID="DecoderView" runat="server" DataKeyNames="sito#">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="SelectedItem" AutoPostBack="true" runat="server" OnCheckedChanged="btn_check" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="sito#" HeaderText="sito#" SortExpression="sito#" InsertVisible="False" />
<asp:BoundField DataField="localita" HeaderText="localita" SortExpression="localita" />
<asp:BoundField DataField="descrizione" HeaderText="descrizione" SortExpression="descrizione" />
<asp:BoundField DataField="IP" HeaderText="IP" SortExpression="IP" />
<asp:BoundField DataField="riserva" HeaderText="riserva" SortExpression="riserva" />
<asp:BoundField DataField="Expr2" HeaderText="gruppo#" SortExpression="Expr2" />
<asp:BoundField DataField="Expr1" HeaderText="tipo_deploy#" SortExpression="Expr1" />
<asp:BoundField DataField="versione" HeaderText="versione" SortExpression="versione" />
<asp:BoundField DataField="versione_itl" HeaderText="versione_itl" SortExpression="versione_itl" />
<asp:BoundField DataField="ultimo_avvio" HeaderText="ultimo_avvio" SortExpression="ultimo_avvio" />
<asp:BoundField DataField="app_disk_space" HeaderText="app_disk_space" SortExpression="app_disk_space" />
<asp:BoundField DataField="TGU" HeaderText="TGU" SortExpression="TGU" />
<asp:BoundField DataField="ip_voyager" HeaderText="ip_voyager" SortExpression="ip_voyager" />
</Columns>
</asp:GridView>

L' uniche proprietà che ho impostato è il DataKeyNames che corrisponde alla Primary Key della mia tabella SQL Server.

Poi ho aggiunto a mano le colonne (i campi) da visualizzare; nel mio caso la prima colonna è una serie di CheckBox.

Le colonne che rappresentano i dati vengono controllate attraverso oggetti BoundField, nei quali dovete impostare il DataField (il nome del campo della tabella), l'HeaderText (l'inrtestazione della colonna nella GV) e la SortExpressione (in genere uguale al DataField).

Per quanto riguarda la pagina abbiamo finito; tutto il resto sarà fatto da code-behind.

Mattepuffo's logo
MySQL Stored Procedure

MySQL Stored Procedure

Dopo aver parlato delle viste affronto il "problema" delle Stored Procedure (SP) in MySQL.

Le SP portanto diversi vantaggi, tra i quali la velocità di esecuzione spicca sugli altri.

Le SP sono più veloci in quanto rimangono nella cache del server e quindi sono più veloci se devono essere richiamate spesso.

Inoltre tutta la logica di esecuzione è lasciata al db separando così i dati dal codice (PHP, Java, C#, ecc....vale per tutti).

I maggiori punti a sfavore derivano dal fatto che non è sempre facile scrivere un layer di astrazione nei vari linguaggi e che non è possibile effetturane il debug.

Per quanto riguarda il primo punto, ciò deriva dal fatto che MySQL non ha una stretta interazione come succede con SQL Server e Asp.NET.

Comunque vediamo come gestire le SP.

Prima di tutto la creazione; connettiamoci al db e scriviamo:

mysql> DELIMITER //
mysql> CREATE PROCEDURE getBook()
-> BEGIN
-> SELECT * FROM book;
-> END//
Query OK, 0 rows affected (0.02 sec)

mysql> DELIMITER ;

DELIMITER // serve per cambiare il delimitatore di fine comando; in questo caso ho impostato // ma può essere uno qualsiasi.

Alla fine ho reimpostato quello tradizionale (il ;).

Si tratta di una vera e propria istruzione; sembra una funziona in VB......

Le istruzioni che ci interessano vanno dentro il blocco BEGIN-END.

getBook() è il nome che gli ho assegnato io; le parenetsi sono obbligatorie proprio come in una funzione/metodo in un linguaggio, e questo perchè è possibile passrgli dei parametri (li vedremo dopo).

Mattepuffo's logo
Le viste in MySQL

Le viste in MySQL

In questi giorni ho avuto a che fare con le viste in MySQL.

Detta in parole povere una view è una tabella virtuale formata dal risultato di una SELECT.

Una volta salvata una view è simile a una classica tabella, formata da righe e colonne ed è interrogata come una normale tabella.

L'utilizzo dell views porta con se diversi vantaggi:

  • semplifica query complesse
  • limita l'accesso ad alcuni dati che si vogliono tenere nascosti
  • extra security derivata dal fatto che la view è una tabella a sola lettura; gli utenti possono solo visualizzare i dati
  • ecc

Creare una view non è difficile.

La sintassi genereale è questa:

CREATE
[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]

VIEW [database_name]. [view_name]

AS
[SELECT statement]

Con MERGE la SELECT viene "mescolata" con l'istruzione che richiama la vista stessa.

Con TEMPTABLE la SELECT relativa alla vista viene utilizzata per creare una tabella temporanea, sulla quale viene poi eseguita l'istruzione richiesta.

Con UNDEFINED sceglierà MySQL cosa usare, ed in genere preferisce MERGE.

UNDEFINED è l'impostazione di default.

Come nome potete impostare sia il nome col prefisso del nome del db, che senza.

Infine abbiamo l'istruzione SELECT che segue alcune regole:

  • non possono essere incluse subquery
  • non possono essere usate variabili
  • non possono essere usati prepared statement
  • non possono essere usate altre view o tabella temporenee
  • non possono essere associate a triggers

Vi mostro la mia view:

CREATE VIEW bookv

AS 

SELECT name, author_name, editor_name, price, isbn, note

FROM book

INNER JOIN author ON book.author_id=author.author_id

INNER JOIN editor ON book.editor_id=editor.editor_id;

Come potete vedere nulla di complicato e se andate a controllare le tabelle del vostro db comparirà anche la view:

mysql> show tables;
+-------------------+
| Tables_in_library |
+-------------------+
| author            |
| book              |
| bookv             |
| editor            |
+-------------------+

A questo punto vi basterà interrogare la view per recuperare quei dati:

SELECT * FROM bookv;

VISTE AGGIORNABILI

Mattepuffo's logo
Sostituire valori GridView e DropDownList con voci Web.config

Sostituire valori GridView e DropDownList con voci Web.config

Lo scenario è questo: ho una GridView e una DropDownList che prendo dei valori da una tabella che ha solo valori numerici (2, 4, 6, ecc), dove ogni valore corrisponde a uno stato (pausa, da trasferire, ecc).

Gli stati non salvati da nessuna parte e io devo rappresentare gli stati al posto del valore perchè ovviamente più leggibili.

Ovviamente non posso modificare il database (sarebbe stato troppo facile).

I modi sono:

  • usare una query che ogni volta trasforma il numero in stato
  • cambiare i valori prendendoli da quelli impostati a mano nel Web.config

La prima strada è più facile ma ha degli svantaggi: se vengono cambiati gli stati devi cambiare la query; inoltre la query è anche più lenta.

Quindi ho proceduto col secondo metodo, e vi spigherò come ho fatto.

Prima di tutto dobbiamo aggiungere i nostri valori nel Web.config (il file di configurazione dei siti Asp.NET):

<appSettings>
<add key="0" value="DA PROCESSARE"/>
<add key="1" value="1 NON LO SO"/>
<add key="2" value="TRASFERITO"/>
<add key="3" value="ERRORE"/>
<add key="4" value="TRASFERITO"/>
<add key="6" value="6 NON LO SO"/>
<add key="7" value="7 NON LO SO"/>
<add key="30" value="PAUSA"/>
</appSettings>

Qui decidiamo ogni numero a che stato corrisponde.

Mattepuffo's logo
Checkbox dentro GridView in Asp.Net

Checkbox dentro GridView in Asp.Net

Il controllo server GridView è uno dei controlli più utilizzati nella creazione di pagine create in Asp.NET.

Visual Studio offre, poi, tante opzioni di personalizzazione così che è abbastanza facile imparare ad usare una GridView in poco tempo.

Però di default la GV è solo una "girglia" che rappresenta i dati in righe e colonne con molte più opzioni rispetto a una classica tabella.

Non offre ad esempio la possibilità di aggiungere DropDownList o CheckBox, a meno che non lo si fa a mano.

Nella guida vi spiego appunto come inserire una colonna CheckBox dentro a una GV.

Do per scontato che abbiate configurato la vostra GV; dovete fare però attenzione a impostare su false il parametro AutoGenerateColumns (che è condigliato a prescindere dall'argomento trattato).

Le colonne andranno inserite a mano dentro al tag <Columns>.

Dentro al suddetto tag andremmo a modificare il template attraverso TemplateField, che rappresenta un campo con contenuto personalizzato.

TemplateField permette di modificare diversi template a seconda dell'operazione che dobbiamo fare; noi useremo ItemTemplate imposta il modello per visualizzare un elemento in un controllo con associazione a dati.

Mattepuffo's logo
Collegare DetailsView e GridView

Collegare DetailsView e GridView

In questa guida vi spiego come collegare una DetailsView a una GridView.

Do per scontato che sappiate cosa siano e come si usano; inoltre io uso un database Sql Server.

Supponiamo di avere database con una classica tabella clienti che ha i seguenti campi:

  • id
  • nome
  • cognome
  • data di nascita
  • email
  • città
  • comune
  • codice fiscale

Di queste voci vogliamo mostrare pubblicamente solo id, nome e cognome.

Per fare questo possiamo usare tranquillamente una GridView impostando manualmente i campi da visualizzare.

Per vedere tutti le altre voci collegate invece impostiamo una DetailsView, collegandola alla GV.

Come fare?