asp.net

Mattepuffo's logo
Usare i template in Java Server Faces

Usare i template in Java Server Faces

Chi ha programmato almeno una volta in Asp.NET, conosce già il concetto di Master Page; una pagina HTML che funziona da template, nella quale alcuni parti sono dinamiche e altre fisse.

Di base le JSP non prevedono una cosa del genere, a parte il meccanismo degli include (come PHP).

Però se usiamo un framework, e nello specifico JSF, abbiamo la possiblità di usare i template.

Vediamo un semplice esempio; una volta creato il progetto (Netbeans ci permette di includere da subito le librerie che ci servono) create una pagina che chiamiamo template.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <h:outputStylesheet name="style.css" library="css" />
    </h:head>
    <h:body>
        <div id="page">
            <div id="header">
                <ui:insert name="header" ></ui:insert>
            </div>
            <div id="content">
                <ui:insert name="content"></ui:insert>
            </div>
            <div id="footer">
                <ui:insert name="footer"></ui:insert>
            </div>
        </div>
    </h:body>
</html>

Come vedete è una semplice pagina con alcuni tag specifici.

Mattepuffo's logo
Asp.NET AJAX

Asp.NET AJAX

Il .NET Framework ha già tutto incluso per usare AJAX senza ricorrere a Javascript.

Di default anche il Web.config è configurato per usarlo; in caso potrete usarlo per cambiare alcune impostazioni.

Vediamo quindi come usare AJAX nelle nostre pagine aspx.

Prima di tutto dobbiamo incorporare un controllo ScriptManager; io consiglio di metterlo nella Master Page in modo da averlo disponibile per qualsiasi pagina:

<asp:ScriptManager ID="scriptManagerDefault" runat="server" />

Tutto qua.

Mattepuffo's logo
Asp.NET LinkButton

Asp.NET LinkButton

In una pagina aspx ho un LinkButton con il quale attivo un evento.

La cosa più "problematica" è che devo passare il valore del LinkButton ad un altro componente.

In questo caso non bastano le solite proprietà Value o Text.

Andiamo con ordine; questo il componente nella pagina:

<asp:LinkButton ID="btn_art_singolo" runat="server" OnCommand="go_Click" CommandName='<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>'>
   <%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>
</asp:LinkButton>

Il LinkButton sta dentro a un Repeater e prende il valore in maniera dinamica da database.

Tanto per cominciare no avremo un evento OnClick ma u nevento OnCommand.

Mattepuffo's logo
Esportare DataSet in Excel

Esportare DataSet in Excel

In un altro articolo ho spiegato come esportare una DataGridView in Excel.

Adesso vediamo come esportare un DataSet direttamente, in modo da renderlo indipendente dal componente dove visualiziamo i dati.

In questo caso, infatti, i dati vengono poi rappresentati su una pagina Asp.NET e il plugin jQuery DataTable, il che rende impossibile esportare i dati direttamente dal componente.

Dobbiamo quindi estrarli direttamente da un DataSet.

Prima di tutto dobbiamo avere un metodo che esegue la connessione e la query; tipo questo:

        public DataSet getSomething()
        {
            connection().Open();
            OdbcCommand cmd = new OdbcCommand();
            OdbcDataAdapter adapter = new OdbcDataAdapter();
            DataSet ds = new DataSet();
            cmd.CommandText = "SELECT * FROM somewhere";
            cmd.Connection = conn;
            adapter.SelectCommand = cmd;
            adapter.Fill(ds);
            ds.Dispose();
            conn.Close();
            return ds;
        }

Semplicemente ritorna un DataSet.

Mattepuffo's logo
jQuery DataTable e Asp.NET

jQuery DataTable e Asp.NET

I Web Form di Asp.NET hanno parrecchi controlli server utili, tipo le GridView per rappresentare i dati in forma tabellarre.

Io personalmene trovo questo controllo un pò obsoleto.

Ad esempio già per il fatto che quando fai il sorting la pagina viene ricaricata.....

Io ho optato per il plugin DataTable di jQuery, che già uso con soddisfazione in PHP.

Lo trovo molto più comodo e moderno.

Vediamo come usarlo in pagine Asp.NET.

Prima di tutto abbiamo una classica funzione che ci restituisce un DataSet o simili:

        public DataSet getCodiciClienti()
        {
            connection().Open();
            OdbcCommand cmd = new OdbcCommand();
            OdbcDataAdapter adapter = new OdbcDataAdapter();
            DataSet ds = new DataSet();
            cmd.CommandText = "SELECT * FROM clienti";
            cmd.Connection = conn;
            adapter.SelectCommand = cmd;
            adapter.Fill(ds);
            ds.Dispose();
            conn.Close();
            return ds;
        }

Nulla di nuovo.

Poi prepariamo a scarichiamo il tutto.

Abbiamo bisogno di jQuery, del plugin che troviamo qua, di una tabella per raccogliere i dati, di un file JS e di un controllo Repeater.

Quindi nell'head della pagina:

<link rel="stylesheet" type="text/css" href="Styles/demo_table_jui.css" />
<link rel="stylesheet" type="text/css" href="Styles/ui-lightness/jquery-ui-1.8.23.custom.css" />
<script type="text/javascript" src="Scripts/jquery182.js"></script>
<script type="text/javascript" src="Scripts/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="Scripts/script.js"></script>

I primi due CSS servono per lo stile della tabella; notate che sto facendo uso di un CSS di jQuery UI.

Questa la funzione JS:

$(document).ready(function () {
    $('.dtable').dataTable({
        "bJQueryUI": true,
        "sPaginationType": "full_numbers"
    });
});

Con il primo parametro indico di usare lo stile di jQuery UI.

Mattepuffo's logo
Asp.NET: accedere a elementi in pagine Master

Asp.NET: accedere a elementi in pagine Master

Una cosa che mi piace molto dell'Asp.NET è il concetto di pagine Master, dove in pratica si impostano tutte le parti comuni delle pagine.

Poi ogni pagina avrà il suo contenuto specifico.

Ogni pagina ha anche un suo file di code-behind (in Visual Basic.NET o C#) con il quale è possibile accedere a tutti gli elementi della pagina semplicemente attraverso l'attributo ID (oltre che fare tutte le altre operazioni che vi pare).

Ma se volessimo accedere ad un elemento che sta nella Master?

Ad esempio io uso una Label per eventuali errori; questa label è nella Master in modo da non doverla replicare per tutte le pagine:

<asp:Label ID="lbl_error" runat="server" Text=""></asp:Label>

Un semplice oggetto Label con ID; se provate a richiamare quell'ID in una pagina vi verrà segnalato un errore.