32 messaggi dal 09 febbraio 2009
Facendo in questo modo l'eliminazione funziona ma e la selezione della riga che mi va in tilt seleziono nel mezzo ed elimina un altro se invece inizio a selezionare dal basso funziona.

la grid view e cosi formata

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
CellPadding="4" Width="50%" DataKeyNames="id">
<RowStyle BackColor="White" ForeColor="#330099"/>
<Columns>
<asp:BoundField DataField="id" HeaderText="id"/>
<asp:BoundField DataField="descrizione" HeaderText="descrizione" />
<asp:ButtonField ButtonType="Image" CommandName="select" DataTextField="id"
ImageUrl="~/images/delete_16x16.gif"
HeaderImageUrl="~/images/delete_16x16.gif" />
</Columns>
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
</asp:GridView>
Questa è la funzione allegata

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged

Dim id_Categoria As Integer = GridView1.SelectedValue
Dim cmdElim As New SqlCommand("Elim_Categoria", CnConn)

cmdElim.CommandType = Data.CommandType.StoredProcedure
cmdElim.Parameters.Add("@id_Categoria", Data.SqlDbType.Int, 10).Value = id_Categoria

Try
CnConn.Open()
cmdElim.ExecuteReader()
CnConn.Close()

Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical = MsgBoxStyle.Critical, "Attenzione")
Finally
If (CnConn.State = Data.ConnectionState.Connecting) Then CnConn.Close()
End Try
End Sub
Mi potete dare una mano
hai provato ad inseire un punto d'interruzione e controlare SelectedValue ? puoi spiegare meglio l'anomalia del codice?

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
32 messaggi dal 09 febbraio 2009
io ho provato a mettere un punto di interruzione il risultato è corretto la cosa strana e che quando clicco sulla riga, prima la seleziona cambiando lo stato del colore, poi dopo la elimina quando seleziono un'alktra riga.
quando cicli la riga? nel codicei che hai postato non mi sembra ci sia, se il risulato è corretto, ovvero SlectedValue è corretto c'è un errore da un altra parte

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
426 messaggi dal 17 aprile 2006
per quel che devi fare sarebbe opportuno mettere come command name del buttonfield il comando "delete" e gestire l'evento
GridView_RowDeleting

nella e della GridViewDeleteEventArgs trovi ben bene il e.Values e.Keys e.RowIndex etc etc
provi li la cancellazione e se non va a buon fine fai un bel e.Cancel = true impedendo la cancellazione stessa dalla gridview

quindi ricapitolando
<asp:ButtonField ButtonType="Image" CommandName="delete" DataTextField="id" 
ImageUrl="~/images/delete_16x16.gif" 
HeaderImageUrl="~/images/delete_16x16.gif" /> 


e poi in vb_ese elabora l'evento deleting della grigli. lavoro in c# e non sono familiare con VB ma dovrebbe essere simile a
Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs) Handles GridView1.RowDeleting 

Dim id_Categoria As Integer = e.Values(0)
Dim cmdElim As New SqlCommand("Elim_Categoria", CnConn) 

cmdElim.CommandType = Data.CommandType.StoredProcedure 
cmdElim.Parameters.Add("@id_Categoria", Data.SqlDbType.Int, 10).Value = id_Categoria 

Try 
CnConn.Open() 
cmdElim.ExecuteReader() 
CnConn.Close() 

Catch ex As Exception 
MsgBox(ex.Message, MsgBoxStyle.Critical = MsgBoxStyle.Critical, "Attenzione") 
e.Cancel = true
Finally 
If (CnConn.State = Data.ConnectionState.Connecting) Then CnConn.Close() 
End Try 
End Sub 


Ciao Alessandro
32 messaggi dal 09 febbraio 2009
Caro taccio grazie per il ocnsiglio ma mettendo un punto di interruzione al tuo suggerimento ottengo questo errore

Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme.
Nome parametro: index

grazie antonio
non utilizzi un xxxDataSorce vero? almeno dal codice che hai postato non mi sembra, se non associ hai dati il tuo controllo utilizzando la proprietà DataSourceID la collezione Values non viene popolata.

ma puoi sempre recuperare la proprietà DataKyes, insomma gai disponibile l'indice della riga e i valori chiave, puoi fare più o meno quello che ti pare.

ma mi rimane la curiosità su un tuo precedente post:


io ho provato a mettere un punto di interruzione il risultato è corretto la cosa strana e che quando clicco sulla riga, prima la seleziona cambiando lo stato del colore, poi dopo la elimina quando seleziono un'alktra riga.


ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
426 messaggi dal 17 aprile 2006
se nella gridview è impostato il datakeynames in e dell'evento delETING dovrebbe esserci la proprietà values vedi cosa ti da in e.values dato che dovrebbe darti l'array delle chiavi inserite in datakeynames che nel tuo caso è solo una.
ribadisco non prendere alla lettera il codice dato che non programmo in vb

Ciao Alessandro

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.