Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Delete Riga GridView

  1. #1

    Delete Riga GridView

    Ciao a tutti,
    ho un gridview :

    codice:
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            Width="100%" OnRowCommand="GridView1_RowCommand" >
                <Columns>
                    <asp:HyperLinkField DataNavigateUrlFields="Categoria" 
                        DataTextField="categoria" HeaderText="Tipologia" />
                    <asp:BoundField DataField="titolo" />
                    <asp:BoundField DataField="descrizione" />
                    <asp:TemplateField Visible="False"  >
                        <ItemTemplate >
                            <asp:HiddenField runat="server" Value='<%# Eval("idprodotto") %>' id="idprodotto" Visible="False" />
                        </ItemTemplate>
                     </asp:TemplateField>
                    <asp:ButtonField ButtonType="Button"  Text="Elimina" CommandName="Elimina"/>
                    
                </Columns>
                   
            </asp:GridView>
    Come vedete sull' OnRowCommand="GridView1_RowCommand".
    Ho definito l'evento Protected Sub GridView1_RowCommand e qui dentro controllo che se hanno clicatto su "Elimina" faccio una query che cancello il prodotto dal db:

    codice:
    If e.CommandName.ToLower = "elimina" Then
    connessione.Open()
                Dim sql As New OleDbCommand
                sql.CommandText = "Delete * from prodotti where idprodotto=" & h.Value.ToString
                sql.Connection = connessione
                'sql.ExecuteNonQuery()
    end if
    Il problema è che io dovrei aggiornare a questo punto il gridview quindi mi dovrebbe presentare a video una riga di meno, ma non so come fare, sul forum ho visto che consigliavano di rifare il BIND del gridview ma se lo faccio il gredview mi torna vuoto, ho provato anche a fare :

    codice:
    Try
            GridView1.DeleteRow(e.CommandArgument)
    Catch ex As Exception
            MsgBox(ex.Message)
    End Try
    Ma mi genera una eccezione perchè mi pare di capire che si aspetti l'evento "GridView1_RowDeleting".

    Potete indirizzarmi su come risolvere il problema dell'aggiornamento della gridview dopo la cancellazione da db ?

    Ciao grazie
    marco

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3
    Effettui il bind del datagrid via codice?

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    marco, per favore, usa i tag CODE per inserire il codice nei post

  4. #4
    si lo faccio via codice,
    dopo avere eseguito la query di cancellazione non faccio altro che fare gridview1.databind.


    Ciao grazie mille
    Marco

    PS("Ok utilizzo Code quando posto il codice, non lo sapevo da ora in poi lo faccio")

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3
    Non basta il Bind da solo, se lo esegui via codice, ma gli devi rifare tutto, quindi apertura connessione db, e lettura e dopo fare il bind, quindi mette queste operazioni in una routine e dopo la cancellazione la richiami.

  6. #6
    Ciao grazie per il suggerimento, ho provato a fare come dicevi,
    ho creato una piccola Sub per il popolamento che richiamo subito dopo aver fatto la cancellazione

    codice:
    Sub popolagrid(ByVal condizione)
            Dim t As New DataTable
            Dim colonnaCategoria As New DataColumn("Categoria")
            Dim colonnaTitolo As New DataColumn("Titolo")
            Dim colonnaDescrizione As New DataColumn("Descrizione")
            Dim idprodotto As New DataColumn("idprodotto")
    
            t.Columns.Add(colonnaCategoria)
            t.Columns.Add(colonnaTitolo)
            t.Columns.Add(colonnaDescrizione)
            t.Columns.Add(idprodotto)
    
            Dim connessione As New OleDbConnection
            connessione.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source=c:\dati_db.mdb;"
            Dim sql As New OleDbCommand
            sql.CommandText = "Select * From Categorie,SottoCat,Prodotti where categorie.idcat=sottocat.idcat and prodotti.idsottocat=sottocat.idsottocat and prodotti.idcat=categorie.idcat"
            sql.Connection = connessione
            connessione.Open()
            Dim rec As OleDbDataReader = sql.ExecuteReader
            While rec.Read
                Dim riga = t.NewRow
                riga("categoria") = rec("categoria")
                riga("Titolo") = rec("Titolo")
                riga("Descrizione") = rec("Descrizione")
                riga("idprodotto") = rec("idprodotto")
                t.Rows.Add(riga)
            End While
            GridView1.DataSource = t
            GridView1.DataBind()
            connessione.Close()
        End Sub
    
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Dim condizione As String = ""
            popolagrid(condizione)
        End Sub
    
        Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    '----QUI FACCIO QUERY PER LA DELETE ----------------
            MsgBox(e.CommandName)
            If e.CommandName.ToLower = "elimina" Then
                MsgBox(GridView1.Rows(e.CommandArgument).Cells(2).Text)
                Dim h As HiddenField = DirectCast(GridView1.Rows(e.CommandArgument).FindControl("idprodotto"), HiddenField)
                MsgBox(h.Value)
                Dim connessione As New OleDbConnection
                connessione.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0; " & _
                "Data Source=c:\dati_db.mdb;"
                connessione.Open()
                Dim sql As New OleDbCommand
                sql.CommandText = "Delete * from prodotti where idprodotto=" & h.Value.ToString
                sql.Connection = connessione
                sql.ExecuteNonQuery()
                Dim condizione As String = ""
                popolagrid(condizione)
    
            End If
        End Sub
    Quando lo utilizzo la prima volta nel pulsante "Ricerca" funziona bene quando lo richiamo subito dopo aver fatto la cancellazione non mi aggiorna il gridview rimane sempre con lo stesso numero di righe ma in realtà sql è stato eseguito.

    Come potrei sistemare,è la strada giusta

    Ciao grazie
    Marco

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    3
    in teoria è corretto, cmq chiudi la connessione prima di chiamare popolagrid, e controlla che la riga venga effettivamente eliminata controllando il valore di ritorno di ExecuteNonQuery

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    perche' alla sub passi una stringa vuota e "condizione" non ha tipo nella firma della sub ? (ti conviene chiamarla anche in modo diverso cmq)

  9. #9
    grazie ragazzi,
    era proprio la connessione l'ho chiusa prima di richiamare popolagrid.
    Ora funziona

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.