Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: problema con datagrid

  1. #1

    problema con datagrid

    Ciao
    sto provando ad utilizzare la funzione EDIT del datagrid.
    ho seguito attentamente il libro... ma ho un errore strano che non so risolvere.

    questo è il codice che ho fra i tag <script>
    codice:
    Sub dgr_uppa(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
            Dim strsql As String
            Dim cmdsql As MySqlCommand
                           
            Dim intid_utente As Integer
            Dim txtusername As TextBox
            Dim txtpassword As TextBox
            Dim txtstatus As TextBox
            Dim txtid_database As TextBox
            Dim txtnotes As TextBox
            
            Dim strusername As String
            Dim strpassword As String
            Dim strstatus As String
            Dim intid_database As Integer
            Dim strnotes As String
            
            intid_utente = dgr.DataKeys(e.Item.ItemIndex)
            txtusername = e.Item.Cells(1).Controls(0)
            txtpassword = e.Item.Cells(2).Controls(0)
            txtstatus = e.Item.Cells(3).Controls(0)
            txtid_database = e.Item.Cells(4).Controls(0)
            txtnotes = e.Item.Cells(5).Controls(0)
            
            strusername = txtusername.Text
            strpassword = txtpassword.Text
            strstatus = txtstatus.Text
            intid_database = txtid_database.Text
            strnotes = txtnotes.Text
            
            strsql = "UPDATE utenti set username=@username, pass=@password, status=@status, id_database=@id_database, notes=@notes WHERE id_utente=@id_utente"
            cmdsql = New MySqlCommand(strsql, myConn)
            cmdsql.Parameters.Add("@username", strusername)
            cmdsql.Parameters.Add("@password", strpassword)
            cmdsql.Parameters.Add("@status", strstatus)
            cmdsql.Parameters.Add("@id_database", intid_database)
            cmdsql.Parameters.Add("@notes", strnotes)
            cmdsql.Parameters.Add("@id_utente", intid_utente)
            Response.Write(strsql)
            
            myConn.Open()
            cmdsql.ExecuteNonQuery()
            myConn.Close()
            dgr.EditItemIndex = -1
            binddgr()
            
        End Sub
    mentre questo è quello che ho nella parte html

    codice:
                        <asp:DataGrid 
                        OnEditCommand="dgr_edit" 
                        OnUpdateCommand="dgr_uppa" 
                        OnCancelCommand="del_dgr" 
                        ID="dgr" 
                        AutoGenerateColumns="false" 
                        runat="server">
                            <Columns>
                                <asp:BoundColumn HeaderText="ID utente" DataField="id_utente" ReadOnly="True"></asp:BoundColumn>
                                <asp:BoundColumn HeaderText="Utente" DataField="username"></asp:BoundColumn>
                                <asp:BoundColumn HeaderText="Password" DataField="pass"></asp:BoundColumn>
                                <asp:BoundColumn HeaderText="Stato" DataField="status"></asp:BoundColumn>
                                <asp:BoundColumn HeaderText="ID Database" DataField="id_database"></asp:BoundColumn>
                                <asp:BoundColumn HeaderText="Note" DataField="notes"></asp:BoundColumn>
                                <asp:EditCommandColumn HeaderText="AZIONI" EditText="Modifica" UpdateText="Aggiorna" CancelText="Cancella"></asp:EditCommandColumn> 
                            </Columns>
                         </asp:DataGrid>
    l'errore che ricevo è questo.
    Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

    Source Error:


    Line 57: Dim strnotes As String
    Line 58:
    Line 59: intid_utente = dgr.DataKeys(e.Item.ItemIndex)
    Line 60: txtusername = e.Item.Cells(1).Controls(0)
    Line 61: txtpassword = e.Item.Cells(2).Controls(0)

    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  2. #2
    nelle proprità del datagrid devi mettere

    DataKeyField="id_utente"
    "...non è detto che sia tardi se non guardi che ora è..."

  3. #3
    messo ma da lo stesso errore....
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  4. #4
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    DataKeys="id_utente"
    questo è l'indice che permette alla griglia di sapere quale riga stai utilizzando.
    Ti consiglio anche di mettere tutto quello che passa attraverso routine di insert,update e delete in un database all'interno di blocchi Try.
    Ti serve sia come debug che come sicurezza per non terminare l'esecuzione nel caso qualcosa andasse storto.
    Ciao
    Legnetto

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    19
    prova a fare cosi':

    tuo metodo:
    cmdsql.Parameters.Add("@username", strusername)

    prova a fare:
    cmdsql.Parameters.Add(new sqlparameter("@username", strusername))

    e cosi' per gli altri parametri

  6. #6
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Originariamente inviato da CiccioG
    prova a fare cosi':

    tuo metodo:
    cmdsql.Parameters.Add("@username", strusername)

    prova a fare:
    cmdsql.Parameters.Add(new sqlparameter("@username", strusername))

    e cosi' per gli altri parametri
    A quella riga non ci arriva, dovrà valutarlo successivamente, per adesso il problema è questo:
    codice:
    Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
    gli passa nothing come indice della riga.
    Ciao
    Legnetto

  7. #7
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Originariamente inviato da Legnetto
    DataKeys="id_utente"
    questo è l'indice che permette alla griglia di sapere quale riga stai utilizzando.....
    Chiaramente ho cannato a scrivere e la riga corretta è:
    DataKeyField="id_utente"
    Ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    19
    intid_utente = dgr.DataKeys(e.Item.ItemIndex)
    prova a fare intid_utente= cInt(e.item.Cell(0).Text)

    Forse non riesce a recuperare l'id.

    Ma poi qual'e' la riga che ti da problema?

  9. #9
    Originariamente inviato da Legnetto
    DataKeys="id_utente"
    questo è l'indice che permette alla griglia di sapere quale riga stai utilizzando.
    Ti consiglio anche di mettere tutto quello che passa attraverso routine di insert,update e delete in un database all'interno di blocchi Try.
    Ti serve sia come debug che come sicurezza per non terminare l'esecuzione nel caso qualcosa andasse storto.
    Ciao
    Legnetto
    Ciao Legnetto, come dicevo ho gia provato ma non funziona...
    ora cerco cosa sono i TRY xche non so proprio che siano....

    ho provato invece a fare come dice CiccioG

    Ora non da errore ma non succede assolutamente niente...

    questa è la stampa della query di update
    codice:
    UPDATE utenti set username=@username, pass=@password, status=@status, id_database=@id_database, notes=@notes WHERE id_utente=@id_utente
    ripeto che quello era codice di un libro...
    inizio ad incasinarmi pesantemente...
    -------------------------
    ..::`DrUmM\n0`::..
    www.jonathandomenici.com

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    19
    ciao,
    fatti una label
    e quando fai l'update fai lblmessage.Text= cInt(e.item.Cell(0).Text)

    E vedi se ad ogni update della riga ti prende il giusto id.
    Poi se tutto va bene assegna l'executenonquery ad un intero
    dim risp as int32=obj.Executenonquery(sql) e prova a stamparlo
    lblmessage.text= risp.tostring.
    Se ti da 0 allora vuol dire che c'e' qualcosa di sbagliato nella query di update e allora vediamo cos'e' che non va, altrimenti se effettivamente te lo aggiorna
    1) Vedi proprio sul db se il valore e' cambiato.
    2) se il valore e' cambiato sbagli a bindare.

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.