I Data Controls DataList e Repeater

3 pagine in totale: <<Indietro 1 2 [3]

Per completare l'opera, è necessario poi specificare una serie di LinkButton (o Button) impostando la proprietà CommandName su update , edit o cancel , in base all'azione associata a ciascun pulsante.

Ciò che è di particolare importanza è il codice utilizzato in fase di aggiornamento dei dati. Recuperando l'istanza associata alla riga corrente, dovremo recuperare tramite il metodo FindControl il riferimento alla textbox (o al controllo) utilizzato, per poi comporre manualmente la query.

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
 
<SCRIPT language="C#" runat="server">
// stringa di conn
string connstring = @"server=localhost;database=master;trusted_connection=true;";
 
void Page_Load () {
   // estrazione dati
   if (!Page.IsPostBack) {
     bindData() ;
   }
}
 
// evento di pressione del pulsante Modifica
void onEditDataList (Object src, DataListCommandEventArgs e) {
   // cambio l'indice
   myDataList.EditItemIndex = e.Item.ItemIndex;
   bindData();
}
 
// evento di pressione del pulsante Annulla
void onCancelDataList (Object src, DataListCommandEventArgs e) {
   // imposto l'indice a -1, overo non seleziono nulla
   myDataList.EditItemIndex = -1;
   bindData();
}
 
// evento di pressione del pulsante Salva
void onUpdateDataList (Object src, DataListCommandEventArgs e) {
   // e.Item è il riferimento al record corrente
   string ID = ((Label) e.Item.FindControl("ID")).Text;
   string nome = ((TextBox) e.Item.FindControl("nome")).Text;
   string indirizzo = ((TextBox) e.Item.FindControl("indirizzo")).Text;
   string telefono = ((TextBox) e.Item.FindControl("telefono" )).Text;
 
   // query di aggiornamento
   string strSQL;
   strSQL = "UPDATE rubrica SET nome = '" + nome.Replace("'", "''") + "', ";
   strSQL += " indirizzo = '" + indirizzo.Replace("'", "''") + "', ";
   strSQL += " telefono = '" + telefono.Replace("'", "''") + "' ";
   strSQL += " WHERE ID = " + ID;
 
   ExecuteSQL(strSQL);
 
   // deseleziono record corrente ed aggiorno il DataList
   myDataList.EditItemIndex = -1;
   bindData();
 
}
 
// routine di estrazione dati
void bindData () {
   // effettuo il DataBinding sul control
   // connessione
   SqlConnection conn = new SqlConnection(connstring);
 
   // query
   SqlDataAdapter query = new SqlDataAdapter("SELECT * FROM rubrica", conn);
 
   // creo il dataset
   DataSet querydataset = new DataSet();
   query.Fill(querydataset);
 
   myDataList.DataSource = querydataset;
   myDataList.DataBind ( );
}
 
int ExecuteSQL (string strSQL) {
  SqlConnection conn = new SqlConnection(connstring);
  conn.Open();
  SqlCommand objcommand = new SqlCommand(strSQL, conn);
 
  // eseguo la query e restituisco il numero
  // di record manipolati dalla stessa
  int Totals = objcommand.ExecuteNonQuery();
  conn.Close();
  return Totals;
}
</SCRIPT>
 
<form runat="server">
 
<asp:DataList id="myDataList" runat="server"
  onEditCommand="onEditDataList"
  onUpdateCommand="onUpdateDataList"
  onCancelCommand="onCancelDataList"
  EditItemStyle-Back>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "nome") %></td>
<td><asp:linkbutton runat="server" commandname="edit" text="Modifica" />
</ItemTemplate>
<EditItemTemplate>
<table >
<tr>
<th colspan="2">Modifica ID <asp:label id="ID" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "ID") %>' /></th>
</tr>
<tr>
<td>Nome:</td>
<td><asp:textbox id="nome" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "nome") %>' /></td>
</tr>
<tr>
<td>Indirizzo:</td>
<td><asp:textbox id="indirizzo" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "indirizzo") %>' Columns="50" /></td>
</tr>
 
<tr>
<td>Telefono:</td>
<td><asp:textbox id="telefono" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "telefono") %>' /></td>
</tr>
 
<tr>
<td colspan="2">
<asp:linkbutton commandname="update" runat="server" text="Salva" />
<asp:linkbutton commandname="cancel" runat="server" text="Annulla" />
</td>
</tr>
</table>
 
</EditItemTemplate>
 
</asp:DataList>
 
</form>

Il risultato è la possibilità di avere una griglia i cui dati sono modificabili in maniera molto semplice.

Immagine

Conclusioni

Finisce qui l'analisi dei più semplici tra i Data Controls: abbiamo compreso meglio quale sia l'approccio da utilizzare in questo nuovo modo di estrarre e visualizzare i dati.

Di sicuro il DataGrid offre funzionalità più avanzate e soprattutto automatizzate, ma anche i due analizzati oggi possono ritornare utili in diversi casi pratici.

All'interno dell'allegato potete trovare diversi esempi da cui partire per comprendere al meglio come utilizzare questi due Data Control: buon divertimento!

3 pagine in totale: <<Indietro 1 2 [3]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC