5 messaggi dal 06 maggio 2020
Buongiorno a tutti,

Sto cercando di gestire un checkbox "checkall" all'interno di una gridview, ma incontro una serie di problemi.

 <asp:GridView ID="gvShow" runat="server" AutoPostback="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Height="224px" HorizontalAlign="Center" Width="761px" CellPadding="4" ForeColor="#333333" DataSourceID="sid_db">
      
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        
        <Columns>
            <asp:TemplateField ItemStyle-Width="50px">
                    <HeaderTemplate>
                        <asp:CheckBox ID="chkCheckAll" runat="server" AutoPostBack="False" OnCheckedChanged="chkCheckAll_CheckedChanged" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkCheck" runat="server" />
                    </ItemTemplate>

<ItemStyle Width="50px"></ItemStyle>
            </asp:TemplateField>
            <asp:BoundField DataField="Scope" HeaderText="Scope" SortExpression="Scope" />
            <asp:BoundField DataField="Brand" HeaderText="Brand" SortExpression="Brand" />
            <asp:BoundField DataField="Site ID" HeaderText="Site ID" SortExpression="Site ID" />
            <asp:BoundField DataField="Site Name" HeaderText="Site Name" SortExpression="Site Name" />
            <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
            <asp:BoundField DataField="CAP" HeaderText="CAP" SortExpression="CAP" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
            <asp:BoundField DataField="Master_ID" HeaderText="Master_ID" SortExpression="Master_ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol">
<HeaderStyle CssClass="hiddencol"></HeaderStyle>

<ItemStyle CssClass="hiddencol"></ItemStyle>
            </asp:BoundField>
        </Columns>

        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

    </asp:GridView>


1° problema: I controlli checkbox sono creati dinamicamente, e a quanto ho capito leggendo in giro (in maniera per me piuttosto criptica) probabilmente dovrei creare un event handler per questi, solo non so come farlo né dove inserire questo codice. Quel che vedo è che questi controlli non sono riconosciuti quando tento di referenziarli nel mio codice.

2° problema: Siccome sono alle prime armi, ho fatto un passo indietro ed ho testato con del junk code se riuscivo semplicemente a vistare i checkbox durante l'evento page load; a seguire c'è il mio test, il risultato un completo fallimento, non succede nulla. Ho anche provato ad inserire il codice nell'evento init, ma il risultato non cambia.

                For Each row As GridViewRow In gvShow.Rows
                    DirectCast(row.FindControl("chkCheck"), CheckBox).Checked = True
                Next


Qualcuno riesce per cortesia a darmi una mano?

Grazie anticipatamente per l'aiuto.
Saluti,
147 messaggi dal 12 febbraio 2016
Ciao Luca,
vedi se questo può aiutarti:
https://www.aspsnippets.com/Articles/Check-Uncheck-all-CheckBoxes-in-ASPNet-GridView-using-jQuery.aspx
5 messaggi dal 06 maggio 2020
Grazie Piero, ma non voglio usare JQuery, vorrei imparare a farlo usando asp.net e vb. In aggiunta vorrei capire cosa sbaglio.
147 messaggi dal 12 febbraio 2016
Ok, hai ragione.
Allora innanzitutto devi impostare la proprietà AutoPostBack del CheckBox con ID "chkCheckAll" su True, e non su False altrimenti non scatena il postback.

Nell'evento chkCheckAll_CheckedChanged per selezionare tutti ti basta ciclare tutte le rows del gridiview così:


        Dim chkSelect As CheckBox = sender
        For Each item As GridViewRow In GridView1.Rows
            Dim cb As CheckBox = item.FindControl("chkCheck")
            cb.Checked = (chkSelect.Checked)
        Next






Ciao
5 messaggi dal 06 maggio 2020
Ciao Piero,

Avevo l'autopostback sul gridview ma non sul checkbox chkCheckAll: ora che l'ho impostato a True infatti qualcosa succede, ma ugualmente non funziona.

Succede che appena visto il checkbox chkCheckAll la pagina va in postback e mi cancella il visto che ho appena messo, senza vistare tutti gli altri checkbox della gridview.

Qualche idea?
Grazie.
Luca
5 messaggi dal 06 maggio 2020
Ho risolto da solo riscrivendo il codice come segue, grazie comunque per l'aiuto Piero:

 <asp:GridView ID="gvShow" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Height="224px" HorizontalAlign="Center" Width="761px" CellPadding="4" ForeColor="#333333">
      
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        
        <Columns>
            <asp:TemplateField ItemStyle-Width="50px">
                    <HeaderTemplate>
                        <asp:CheckBox ID="ChkSelectAll" runat="server" Autopostback="True" OnCheckedChanged="ChkSelectAll_CheckedChanged" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="ChkSigleItem" runat="server" OnCheckedChanged="ChkSigleItem_CheckedChanged" />
                    </ItemTemplate>

<ItemStyle Width="50px"></ItemStyle>
            </asp:TemplateField>
            <asp:BoundField DataField="Scope" HeaderText="Scope" SortExpression="Scope" />
            <asp:BoundField DataField="Brand" HeaderText="Brand" SortExpression="Brand" />
            <asp:BoundField DataField="Site ID" HeaderText="Site ID" SortExpression="Site ID" />
            <asp:BoundField DataField="Site Name" HeaderText="Site Name" SortExpression="Site Name" />
            <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
            <asp:BoundField DataField="CAP" HeaderText="CAP" SortExpression="CAP" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
            <asp:BoundField DataField="Master_ID" HeaderText="Master_ID" SortExpression="Master_ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol">
<HeaderStyle CssClass="hiddencol"></HeaderStyle>

<ItemStyle CssClass="hiddencol"></ItemStyle>
            </asp:BoundField>
        </Columns>

        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

    </asp:GridView>
   

    <br />

    <br />
    <br />



    <asp:SqlDataSource ID="sid_db" runat="server" ConnectionString="<%$ ConnectionStrings:sidConnectionString %>"> </asp:SqlDataSource>



    </asp:Content>


E questo il codice dietro la pagina:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Page.IsPostBack = False Then

            ''Set value for default SQL query
            Dim query As String
            query = "SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country FROM Sites INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID INNER JOIN Countries ON Sites.country_ID = Countries.ID"
            sid_db.SelectCommand = query

            gvShow.DataSource = sid_db
            gvShow.DataBind()

        End If

    End Sub

    Protected Sub ChkSelectAll_CheckedChanged(sender As Object, e As EventArgs)

        Dim a As Boolean = DirectCast(sender, CheckBox).Checked
        For Each row As GridViewRow In gvShow.Rows
            Dim cbx As CheckBox = row.FindControl("ChkSigleItem")
            cbx.Checked = a
        Next

    End Sub

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.