Tutte le applicazioni per la consultazione della posta via browser hanno una caratteristica: una colonna con un CheckBox tramite cui selezionare le email da cancellare. Questa colonna ha nella riga di intestazione un altro CheckBox tramite il quale si possono selezionare o deselezionare tutti quelli presenti nella colonna.
Per fare questo si può utilizzare un custom control che eredita da DataGridColumn.
namespace SMControls { ToolboxData("<{0}:checkboxcolumn runat=server></{0}:checkboxcolumn>")] public class CheckBoxColumn : DataGridColumn { public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType) { base.InitializeCell (cell, columnIndex, itemType); if (!this.Owner.Page.IsClientScriptBlockRegistered("__CHECKBOXCOLUMN")){ this.Owner.Page.RegisterClientScriptBlock("__CHECKBOXCOLUMN", "<script>" + "function HeaderClick(ck, pattern){ " + "frm = document.forms[0]; " + "for (var i=0; i<frm.elements.length; i++){ " + "var e = frm.elements<i>; " + "if (e.type == 'checkbox'){ " + "if (e.name.substring(e.name.length - pattern.length, e.name.length) == pattern){ " + "e.checked = ck.checked; " + "}}}} " + "</script>"); } if (itemType == ListItemType.Header){ CheckBox ck = new CheckBox(); ck.Attributes.Add("onclick", String.Format("HeaderClick(this, '{0}{1}');", this.Owner.ID, columnIndex)); cell.Controls.Add(ck); } if ((itemType == ListItemType.Item) || (itemType == ListItemType.AlternatingItem)) { CheckBox ck = new CheckBox(); ck.ID += this.Owner.ID + columnIndex; cell.Controls.Add(ck); } } } } Ai CheckBox che vengono creati nelle righe viene dato un id con un suffisso che possa identificarli come appartenenti ad una determinata colonna. All'evento client "onclick" del CheckBox nell'intestazione viene chiamato un metodo che accetta il checkbox ed il suffisso per i checkbox della colonna. Questo metodo si occuperà di selezionare o deselezionare i checkbox. Ecco un semplice utilizzo del controllo appena creato: [code lang="aspx"]<%@ Page language="c#" %> <%@ Register tagprefix="sm" assembly="CheckBoxColumn" namespace="SMControls"%> <script runat="server"> void Page_Load(object sender, System.EventArgs e){ System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("c:\\"); DataGrid1.DataSource = di.GetFiles(); DataGrid1.DataBind(); } </script> <form id="Form1" method="post" runat="server"> <asp:datagrid id="DataGrid1" runat="server" autogeneratecolumns="False"> <columns> <sm:checkboxcolumn runat="server" /> <sm:checkboxcolumn runat="server" /> <asp:boundcolumn runat="server" datafield="name" /> </columns> </asp:datagrid>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Implementare il throttling in ASP.NET Core
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Effettuare il binding di date in Blazor
Load test di ASP.NET Core con k6
Short-circuiting della Pipeline in ASP.NET Core
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Chat con gli MVP italiani di ASP.NET
- Leggere una chiave di un cookie con ASP.NET
- Estrarre dati randomici da una lista di oggetti in C#
- Utilizzare i Behaviors nelle Windows Store app
- Utilizzare tipi complessi con le Profile API