Pur non essendo particolarmente flessibile di sicuro il DataGrid è comodo da utilizzare ed offre tante funzionalità facilmente implementabili.
Una delle cose che potrebbe essere migliorata è l'area del pager, ovvero il posto in cui sono contenuti i link alle pagine successive, implementate attraverso LinkButton.
In questo esempio dunque sostituiremo nella barra di stato del browser qualcosa come:
javascript:__doPostBack('myDataGrid:_ctl9:_ctl1','')
con un più chiaro "Pagina 1".
Per farlo è sufficiente intercettare l'evento ItemCreated del DataGrid, verificare che il control creato sia il Pager e quindi fare un ciclo sui controls contenuti.
A questo punto si tratta di aggiungere due attributi per fare in modo che il testo cambi attraverso Javascript, che sono OnMouseOver quando si passa sopra e OnMouseOut quando si esce dall'area, che useremo per ripulire la status bar.
[code lang="aspx"]<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<SCRIPT language="C#" runat="server">
// stringa di conn
string connstring = @"server=localhost;database=pubs;trusted_connection=true;";
void Page_Load () {
// estrazione dati
if (!IsPostBack)
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 sales", conn);
// creo il dataset
DataSet querydataset = new DataSet();
query.Fill(querydataset);
myDataGrid.DataSource = querydataset;
myDataGrid.DataBind ( );
}
private void myDataGrid_ItemCreated(object sender, DataGridItemEventArgs e)
{
// solo se è il pager
if (e.Item.ItemType == ListItemType.Pager) {
// elenco tutti i controls all'interno
TableCell pg = (TableCell) e.Item.Controls[0];
for (int i = 0; i<pg.Controls.Count;i+=2) {
// intercetto solo i LinkButton
if (pg.Controls<i>.ToString().IndexOf("LinkButton") >=0) {
LinkButton lb = (LinkButton) pg.Controls<i>;
lb.Attributes.Add("onMouseOver", "window.status='Vai alla pagina " + lb.Text + "';return true;");
lb.Attributes.Add("onMouseOut", "window.status='';return true;");
}
}
}
}
private void myDataGrid_PageIndexChanged(object sender, DataGridPageChangedEventArgs e){
// imposta il numero di pagina
myDataGrid.CurrentPageIndex = e.NewPageIndex;
// effettua di nuovo il binding
bindData();
}
</SCRIPT>
<form runat="server">
<ASP:DataGrid id="myDataGrid" runat="server"
CellPadding = "3"
HeaderStyle-BackColor="#336699"
HeaderStyle-Font-Size="Large"
EditItemStyle-BackColor="yellow"
ItemStyle-BackColor="lightsteelblue"
AlternatingItemStyle-BackColor="lightgray"
AutoGenerateColumns="true"
onItemCreated="myDataGrid_ItemCreated"
AllowPaging="True"
OnPageIndexChanged="myDataGrid_PageIndexChanged"
PageSize="5"
PagerStyle-Mode="NumericPages"
PagerStyle-Font-Bold="True"
PagerStyle-ForeColor="Red"
PagerStyle-HorizontalAlign="Center"
/>
</form>
L'esempio può essere sfruttato al meglio creando un Custom Control che erediti da DataGrid, in modo da rendere di più facile utilizzo questa versione modificata all'interno di più pagine o di più progetti.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.