Home / Programmazione / C# - Asp.NET / Selezionare tutte le CheckBox in C#
Mattepuffo

Selezionare tutte le CheckBox in C#

Selezionare tutte le CheckBox in C#

Tempo fa scrissi un articolo per far vedere com'era possibile integrare le CheckBox in una GridView.

Ovviamente possiamo volerle selezionare/deselezionare tutte in una botta.

Questo è possibile farlo abbastanza agilmente in Javascript; ma è possibile farlo anche in C#.

Vediamo come fare; supponendo di trovarci dentro una pagina Asp.NET con una GridView del genere:

<asp:Button ID="selectAll" runat="server" Text="Seleziona tutti" OnClick="btn_selectAll" />
<asp:Button ID="deselectAll" runat="server" Text="Deseleziona tutti" OnClick="btn_deselectAll" />
<asp:GridView ID="DecoderView" runat="server" DataKeyNames="sito#" DataSourceID="objDecoder"
AllowPaging="True" AllowSorting="True" AutoGenerateSelectButton="True" PageSize="5"
AutoGenerateColumns="False" CssClass="grid">
<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>

Come vedete sopra la GV ci sono due pulsanti che richiamano due eventi nel code-behind:

protected void btn_selectAll(object sender, EventArgs e)
{
SelectCB(true);
}

protected void btn_deselectAll(object sender, EventArgs e)
{
SelectCB(false);
}

private void SelectCB(bool seleziona)
{
if (!seleziona)
{
for (int contatore = 0; contatore < DecoderView.Rows.Count; contatore++)
{
CheckBox ChkDeSeleziona = (CheckBox)DecoderView.Rows[contatore].FindControl("SelectedItem");
ChkDeSeleziona.Checked = false;
}
}
else
{
for (int contatore = 0; contatore < DecoderView.Rows.Count; contatore++)
{
CheckBox ChkSeleziona = (CheckBox)DecoderView.Rows[contatore].FindControl("SelectedItem");
ChkSeleziona.Checked = true;
}
}
}

Quei due eventi richiamano entrambi un metodo SelectCB che richiede un parametro bool.

Questo metodo controlla lo stato del parametro e agisce di conseguenza:

  • se è false le seleziona tutte
  • se è true le deseleziona

Per fare la selezione/deselezione multipla usiamo dei cicli for (uno per ogni tipo di azione a seconda dello stato del parametro selezione).

Il ciclo for identifica tutte le righe della GridView e trova le CheckBox; una volta trovate imposta il Checked.