Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Checkbox in gridview

  1. #1

    Checkbox in gridview

    sto cercando di aggiungere una colonna checkbox nella mia gridview:
    codice:
        <asp:Panel ID="Panel1" runat="server" ScrollBars="Horizontal">
            <asp:GridView ID="DecoderView" runat="server" AllowPaging="True" DataSourceID="DecoderSql"
                DataKeyNames="sito#" AllowSorting="True" CssClass="grid" PageSize="5" PagerSettings-Visible="False">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:LoginView ID="LoginView1" runat="server">
                                <LoggedInTemplate>
                                    <asp:CheckBox ID="SelectedItem" AutoPostBack="true" runat="server" OnCheckedChanged="SelectedItems_CheckedChanged" />
                                </LoggedInTemplate>
                            </asp:LoginView>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </asp:Panel>
    code behind:
    codice:
            protected void SelectedItems_CheckedChanged(object sender, EventArgs e)
            {
                CheckBox checkbox = (CheckBox)sender;
                GridViewRow row = (GridViewRow)checkbox.NamingContainer;
                string cid = row.Cells[0].Text;
                bool status = checkbox.Checked;
            }
    quando provo a selzionare una casella mi viene fuori questo errore:
    Unable to cast object of type 'System.Web.UI.WebControls.LoginView' to type 'System.Web.UI.WebControls.GridViewRow'.

    come posso fare??

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Direi che il problema è quì:
    codice:
    GridViewRow row = (GridViewRow)checkbox.NamingContainer
    Perchè la tua checkbox è contenuta in una loginView prima ancora che in una gridViewRow

    Percui devi fare tutti i passaggi:
    codice:
    LoginView l = (LoginView)checkbox.NamingContainer
    GridViewRow row = (GridViewRow)l.NamingContainer
    e forse ne devi fare altri prima di arrivare alla row, perchè vedo che ci sono altre cose incapsulate

  3. #3
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    peccato che la checkbox non funzioni con il command

  4. #4
    ah ok è un problema di "incapsulamento" quindi.
    domani provo.

    Originariamente inviato da GabbOne
    peccato che la checkbox non funzioni con il command
    cosa intendo di preciso??

  5. #5
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    le checkbox a differenza dei button non fanno scatenare l'evento onCommand della GridView o perlomeno non definiscono il CommandArgument (indice riga) ed il CommandName (nome comando) ... questo tornerebbe utile per accedere direttamente alla riga senza andare ad impelagarsi in una serie di cast dovuti all'incapsulamento degli oggetti che puo sempre creare problemi nel momento in cui la gridview cambi a livello di layout.


    Sinceramente mi pare strana come cosa ....



    http://msdn.microsoft.com/en-us/libr...owcommand.aspx

  6. #6
    capito...cmq ho risolto perchè tanto le checkbox non devono stare dentro un loginview che ho tolto.

    volevo sapere però un'altra cosa: se volessi selezionarle tutte contemporaneamente??

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Prova a richiamare questa (e' Javascript):

    codice:
    function selezionacb() 
    { 
    for( i=0; i < document.forms[0].elements.length; i++ ) 
    { 
     if ( document.forms[0].elements[i].type == 'text' ) 
     { 
      var valoreText = document.forms[0].elements[i].value; 
     } 
     if ( document.forms[0].elements[i].type == 'checkbox' ) { 
    	 if (document.forms[0].cb.checked) { 
    		if ( Math.abs(valoreText) != 0 ) { 
    		 document.forms[0].elements[i].checked=true; 
    		} 
    	 } 
    	 else { 
    	 document.forms[0].elements[i].checked=false; 
    	 }
     } 
    } 
    }

  8. #8
    ho messo la funziona nell'head della master.
    poi nella pagina ho fatto così:
    codice:
    <asp:Button ID="Button1" runat="server" Text="Seleziona tutti" OnClick="slezionacb();"/>
    ma mi da un errore.
    che devo richiamare nell'OnClick??

  9. #9
    ho fatto da c#:
    codice:
            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;
                    }
                }
            }
    
            protected void BtnSeleziona_Click(object sender, EventArgs e)
            {
                SelectCB(true);
    
            }
    
            protected void BtnDeseleziona_Click(object sender, EventArgs e)
            {
                SelectCB(false);
            }
    ho aggiunto due pulsanti dove richiamo i due eventi.
    grazie cmq!

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    onClick="slezionacb();"/>


    manca una "e" forse e' quello...
    hai risolto lato server comunque. ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.