Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    checkbox in gridview non conserva selezione su postback

    Help
    il mio simpatico gridview qui sotto con i dati paginati, non mantiene la selezione del checkbox quando cambio pagina e torno poi nella pagina con i checkbox precedentemente selezionati... eppure mi pare non gli manchi niente... non ha parents con enableviewstate settato a false...
    codice:
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    EnablePersistedSelection="True" DataKeyNames="conto" 
    DataSourceID="Sqllist" PageSize="15" AutoGenerateColumns="false">
            <Columns>
                 <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:CheckBox ID="chkSelected" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField> 
                <asp:BoundField DataField="conto" HeaderText="Conto" SortExpression="conto" />
                <asp:TemplateField HeaderText="Cliente" SortExpression="an_descr1">
                            <ItemTemplate>
                                <b><asp:Label ID="LabelCLI" runat="server" Text='<%# String.Format("{0} {1}", Eval("an_descr1"), Eval("an_descr2"))%> '></asp:Label></b>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Città" SortExpression="an_citta">
                            <ItemTemplate>
                                <asp:Label ID="Labelind" runat="server" Text='<%# String.Format("{0} {1} ({2})", Eval("an_cap"), Eval("an_citta"), Eval("an_prov"))%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
            </Columns>
            <EmptyDataTemplate>
                <div class="alert alert-danger" role="alert" style="margin:0px -3px 0px -3px;">In database non è presente nessun record da visualizzare!</div>
            </EmptyDataTemplate>
        </asp:GridView>
    chejedevodì?
    Ultima modifica di supermac; 23-06-2015 a 15:37
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    non so se naturalmente dovrebbe farlo, a me risulta che fa una query ogni volta (ma magari ricordo male). prova con il viewstate a true, la butto cosi', non posso provare ora.

    se fa la query ogni volta devi conservare i checked e ri-selezionarli nel row_databound

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    già provato a mettere enableviewstate a true sul gridview e fa lo stesso scherzo....
    ma non mi pare rifaccia la query....

    che due b..... conserverò i checked in una session ma che roba becera.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    pare che sia problema noto, come ricordavo, non preserva lo stato dei controlli custom
    http://stackoverflow.com/questions/2...ween-postbacks

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    l'ho fatto così, se ci sono metodi più smart e meno dispendiosi in termini di righe di codice ben vengano i suggerimenti... mi secca non poco il dover fare un postback ad ogni spunta su un checkbox ma non vedo alternative

    codice:
    '***questo sul rowdatabound setta lo stato del checkbox quando mostro i dati impaginati
     Protected Sub gridview1_rowdatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowDataBound
            Dim chk As CheckBox, gvr As GridViewRow = e.Row
            Dim dv = gvr.DataItem
            If Not IsNothing(dv) Then
                If InStr("," & Session("selezionate"), "," & dv.item("conto").ToString()) > 0 Then
                    chk = gvr.Cells(0).FindControl("chkSelected")
                    chk.Checked = True
                End If
            End If
        End Sub
    
    '*** sul postback modifico la session a seconda dello stato del checkbox
        Protected Sub CHK_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
            'mette in session le anagrafiche conto selezionate
            Dim checkbox As CheckBox = sender
            Dim anagrafica = checkbox.Attributes("dato").ToString.ToString
            If checkbox.Checked = True Then
                Session("selezionate") &= anagrafica & ","
            Else
                Session("selezionate") = Replace("," & Session("selezionate"), "," & anagrafica & ",", ",")
                Session("selezionate") = Replace(Session("selezionate"), ",,", "")
            End If
        End Sub
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    avevo visto il link ma francamente non ho capito cosa fa la funzione in c# public Control GetPostBackControl(Page thePage) proposta come soluzione perciò ho fatto in altra maniera... eventually sapresti convertirla in Vb?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    ma no, al postback di un bottone esterno o al cambiamento pagina (non al click su ogni Checkbox) fai un ciclo nelle righe del gridview

    codice:
    For Each Riga As GridViewRow In TuaGridView.Rows      
         ' qui fai una findcontrol in "Riga" della checkbox e controlli il suo stato, se e'             checked, metti l'indice della riga in un array
    Next
    


    e controlli quali INDICI riga hanno la checkbox con il check e poi al rowdatabound li controlli e li riproponi...
    Ultima modifica di djciko; 24-06-2015 a 12:41

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    posso metterlo sul
    page.load
    if ispostback ....?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    si funziona sul page load però ho scoperto che se metto in arary gli indici di riga mi mantiene selezionate le righe da una pagina all'altra, ovvero se seleziono la riga 1 della pagina uno e poi passo a pagina 3, trovo selezionata la riga 1 di pagina 3... ma so come ovviare
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    si lo faceva anche a me. perche' seleziona la stessa riga del set che sta visualizzando.

    semplicemente mettevo l'inidice della riga selezionata a -1, all'evento di cambio pagina :

    GridView.SelectedIndex = -1
    Ultima modifica di djciko; 24-06-2015 a 15:28

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.