Newsgroup: it.comp.lang.visual-basic
Titolo: Solito sub di binding ,ma problema diverso [lungo]

Con la mia maledettissima procedura per il data binding i miei problemi non
sono finiti :
Non appena ho inserito la possibilità di modificare i record all'interno del
Datagrid , la procedura mi genere il seguente errore :
    Exception Details: System.ArgumentOutOfRangeException: Specified
argument was out of the range of valid values. Parameter name: index
    Source Error:
    Line 242:        ' Recupera i valorti aggiornati dei campi dal Datagrid
    Line 243:        Dim tb As TextBox
    Line 244:        tb = CType(e.Item.Cells(4).Controls(0), TextBox)
    Line 245:        Dim Titolo = tb.Text
    Line 246:        tb = CType(e.Item.Cells(5).Controls(0), TextBox)
    Source File: c:\inetpub\wwwroot\softeng\catalogo.aspx.vb    Line: 244
La procedura funziona correttamente , il problema è che quando eseguo :
    Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
    DataGrid1.EditItemIndex = e.Item.ItemIndex
    FillDataSet(sqlGenerate())
    End Sub
Il problema , almeno credo , deriva dalla sub FillDataSet(sqlGenerate())
(che allego) mi cancella il corretto valore di e.Item.ItemIndex.
'Genera la Stringa SQL
Function sqlGenerate() As String
    Dim strSQL As String = "SELECT * FROM Catalogo"
    ' Se c'è un Genere selzionato
    If ComboGeneri.SelectedIndex >= 1 Then
        strSQL = "SELECT * FROM Catalogo WHERE Genere = " &
ComboGeneri.SelectedItem.Value
    End If
    ' Se si sta effettuando una ricerca
    If tbxricerca.Text <> "" Then
        Dim Campo As String = SearchCombo.SelectedItem.Text
        Dim Condizione As String = tbxricerca.Text.ToString
        strSQL = "SELECT * FROM Catalogo WHERE " & Campo & " LIKE '" &
Condizione & "%'"
        ' Svuota la textbox
        tbxricerca.Text = ""
    End If
    Return strSQL
End Function
    'Setta e Popola il DataGrid
Sub FillDataSet(ByVal strSQL As String)
    ' Collega il controllo DataGrid popolando la griglia
    DataGrid1.AutoGenerateColumns = False
    DataGrid1.DataSource = ds
    DataGrid1.DataKeyField = "ID_Catalogo"
    ' Colonna ID
    Dim dgc_id As New BoundColumn()
    dgc_id.DataField = "ID_Catalogo"
    dgc_id.HeaderText = "Codice"
    dgc_id.ItemStyle.Width = New Unit(30)
    DataGrid1.Columns.Add(dgc_id)
   [Seguono le def. degli altri campi]
    If cn.State <> ConnectionState.Closed Then cn.Dispose()
    cn.Open()
    Dim Dati As New OleDbDataAdapter(strSQL, cn)
    cn.Close()
      Dati.Fill(ds)
    DataGrid1.DataBind()
 End Sub
Scusate la prolissità , ma credo che sia l'unico modo per centrare il
problema .
Grazie 1.000 a tutti
-- 
Ciao
Flex

 argument was out of the range of valid values. Parameter name: index
Ho sempre cercato di evitare i legami al componente,
non ho testato il codice,
una domanda:
"il dataset vive all'inteno della pagina ?"
Ave
giuseppeD


-- 
Ciao
Flex
[ MAIL ATTACH, SPAM, and msgs larger than 95K > /dev/null ]

 se è aperto prima di riaprirlo.
Non riesco a vedere la memorizzazione del dataset a livello di pagina.
Se vuoi digitare.
Ave
giuseppeD

 ha scritto nel messaggio
news:zK1eb.192850$R32.6...@news2.tin.it...

Il Dataset è a livello di pagina , non di procedura


 Il Dataset è a livello di pagina , non di procedura
Ho l'impressione che la costruzione a runtime delle colonne, mio pensiero, è
problematico per l'impostazione delle colonne da utilizzare per gli eventi,
modifica,
edit,cancellazione.
Ho la sensazione che rilevare i valori dalle celle della griglia, siamo in
Web e no in Windows Form, è problematico.
Vero che si impostata la colonna key.
Se è possibile ricavare il valore della key dalla cella, perchè impostarla a
livello di proprietà della griglia ?
Ave
giuseppeD

 livello di proprietà della griglia ?
Non ho capito quello che vuoi dire



  Line 242:        ' Recupera i valorti aggiornati dei campi dal Datagrid
    Line 243:        Dim tb As TextBox
    Line 244:        tb = CType(e.Item.Cells(4).Controls(0), TextBox)
    Line 245:        Dim Titolo = tb.Text
Se ho capito stai cercando di ricavare i valore di una cella del datagrid.
La griglia che si vede nel browser è costruito da codice HTML, quindi
statico, non rieleggibile, se non a mezzo di script.
Mi sembra impossibile, se alcuno smentisce è meritevole, leggere a runtime
il contenuto di una cella della griglia, come nelle Windows form.
Per questo è presente il key nella proprietà della griglia.
Da quello uno si rivava gli altri dati.
Ave
giuseppeD


Non sto leggendo i dati di un record , ma quelli che l'utente ha modificato
,
qundo si clicca su Modifica i valori dei campi del record selezionato
diventano delle extbox , l'utente varia il risultato di una o piu' e poi
clicca su aggiorna per salvare le modifiche. In che altro modo potrei
accedere a questi dati ?


 ha scritto nel messaggio
news:bleosd$h5r$1...@lacerta.tiscalinet.it...

Prova così:
Dim Email As String = DirectCast(e.Item.FindControl("txtEmail"),
TextBox).Text
giuseppeD

 ha scritto nel messaggio
news:mRBeb.149938$hE5.5...@news1.tin.it...

Spero di non tediarti , ma ho fatto le modifiche che mi hai detto e guarda
che errore :
Object reference not set to an instance of an object.
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.NullReferenceException: Object reference not set
to an instance of an object.
Source Error:
Line 234:        Dim tb As TextBox
Line 235:        'tb = CType(e.Item.Cells(4).Controls(0), TextBox)
Line 236:        Dim Titolo As String =
DirectCast(e.Item.FindControl("Titolo"), TextBox).Text ' Riga incriminata
Line 237:        'Dim Titolo = tb.Text
Line 238:        tb = CType(e.Item.Cells(5).Controls(0), TextBox)
Source File: c:\inetpub\wwwroot\softeng\catalogo.aspx.vb    Line: 236
Eppure ,come puoi vedere dal codice integrale che allego ,  esiste la
colonna Titolo del DataGrid
ublic Class catalogo
Inherits 
System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents ComboGeneri As System.Web.UI.WebControls.DropDownList
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents Label5 As System.Web.UI.WebControls.Label
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Label6 As System.Web.UI.WebControls.Label
Protected WithEvents SearchCombo As System.Web.UI.WebControls.DropDownList
Protected WithEvents tbxricerca As System.Web.UI.WebControls.TextBox
Protected WithEvents LinkButton1 As System.Web.UI.WebControls.LinkButton
Protected WithEvents logout As System.Web.UI.WebControls.LinkButton
Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected WithEvents PanelUtente As System.Web.UI.WebControls.Panel
#Region " Codice generato da Progettazione Web Form "
'Chiamata richiesta da Progettazione Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Init
'CODEGEN: questa chiamata al metodo è richiesta da Progettazione Web Form.
'Non modificarla nell'editor del codice.
InitializeComponent()
End Sub
#End Region
Dim CONN_STRING As String =
ConfigurationSettings.AppSettings.Get("CONNSTRING")
Dim cn As New OleDbConnection(CONN_STRING)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If Not Me.IsPostBack Then
' Carica i generi musicali nella Combo
InitCombo()
' Carica i campi su cui effettuare la ricerca
InitSearchCombo()
' legge il dataset e popola il datagrid
FillDataSet(sqlGenerate())
End If
' Controlla che tipo di utente sta accedendo alla pagina
DisabilitaBottoni()
End Sub
'Genera la Stringa SQL
Function sqlGenerate() As String
Dim strSQL As String = "SELECT * FROM Catalogo"
' Se c'è un Genere selzionato
If ComboGeneri.SelectedIndex >= 1 Then
strSQL = "SELECT * FROM Catalogo WHERE Genere = " &
ComboGeneri.SelectedItem.Value
End If
' Se si sta effettuando una ricerca
If tbxricerca.Text <> "" Then
Dim Campo As String = SearchCombo.SelectedItem.Text
Dim Condizione As String = tbxricerca.Text.ToString
strSQL = "SELECT * FROM Catalogo WHERE " & Campo & " LIKE '" & Condizione &
"%'"
' Svuota la textbox
tbxricerca.Text = ""
End If
Return strSQL
End Function
'Setta e Popola il DataGrid
Sub FillDataSet(ByVal strSQL As String)
Dim ds As New DataSet()
' Collega il controllo DataGrid popolando la griglia
DataGrid1.AutoGenerateColumns = False
DataGrid1.DataSource = ds
DataGrid1.DataKeyField = "ID_Catalogo"
' Colonna ID
Dim dgc_id As New BoundColumn()
dgc_id.DataField = "ID_Catalogo"
dgc_id.HeaderText = "Codice"
dgc_id.ItemStyle.Width = New Unit(30)
DataGrid1.Columns.Add(dgc_id)
' Colonna Titolo
Dim dgc_title As New BoundColumn()
dgc_title.DataField = "Titolo"
dgc_title.HeaderText = "Titolo"
DataGrid1.Columns.Add(dgc_title)
' Colonna Cantante
Dim dgc_cantante As New BoundColumn()
dgc_cantante.DataField = "Cantante"
dgc_cantante.HeaderText = "Cantante"
DataGrid1.Columns.Add(dgc_cantante)
' Colonna Album
Dim dgc_album As New BoundColumn()
dgc_album.DataField = "Album"
dgc_album.HeaderText = "Album"
DataGrid1.Columns.Add(dgc_album)
' Colonna Durata
Dim dgc_durata As New BoundColumn()
dgc_durata.DataField = "Durata"
dgc_durata.HeaderText = "Durata"
DataGrid1.Columns.Add(dgc_durata)
' Colonna KB
Dim dgc_KB As New BoundColumn()
dgc_KB.DataField = "KB"
dgc_KB.HeaderText = "KB"
DataGrid1.Columns.Add(dgc_KB)
' Colonna Preview
Dim dgc_preview As New BoundColumn()
dgc_preview.DataField = "Demo"
dgc_preview.HeaderText = "Preview"
DataGrid1.Columns.Add(dgc_preview)
If cn.State <> ConnectionState.Closed Then cn.Dispose()
cn.Open()
Dim Dati As New OleDbDataAdapter(strSQL, cn)
cn.Close()
DisabilitaBottoni()
Dati.Fill(ds)
DataGrid1.DataBind()
End Sub
' Disabilità i bottoni a secondo del tipo di utente
Sub DisabilitaBottoni()
Dim Utente As utente = Session("Login")
If Not Utente Is Nothing Then
If Utente.Tipo.Equals(Utente.Tipo_Utente.Registrato) Then
' Utente Registrato (non può cancellare o modificare articoli)
DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False
Label2.Text = "Ben loggato " & Utente.Username.ToUpper
DataGrid1.Columns(0).Visible = True
LinkButton1.Visible = False
ElseIf Utente.Tipo.Equals(Utente.Tipo_Utente.Amministratore) Then
' Utente amministratore (non può comprare)
DataGrid1.Columns(0).Visible = False
Label2.Text = "Ben loggato " & Utente.Username.ToUpper
End If
Else ' Utente Anonimo
PanelUtente.Visible = False
DataGrid1.Columns(0).Visible = False
DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False
End If
End Sub
' Popola la Combo contenente i generi musicali
Private Sub InitCombo()
cn.Open()
Dim cmd As New OleDbCommand("SELECT * FROM Genere ORDER BY Genere ", cn)
Dim dr As OleDbDataReader = cmd.ExecuteReader()
ComboGeneri.DataSource = dr
ComboGeneri.DataTextField = "Genere"
ComboGeneri.DataValueField = "ID_Genere"
ComboGeneri.DataBind()
dr.Close()
cn.Close()
End Sub
' Campi su cui effettuare la ricerca
Private Sub InitSearchCombo()
SearchCombo.Items.Add("Titolo")
SearchCombo.Items.Add("Cantante")
SearchCombo.Items.Add("Album")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub
Private Sub ComboGeneri_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ComboGeneri.SelectedIndexChanged
' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub
Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles LinkButton1.Click
Server.Transfer("AddArticolo.aspx")
End Sub
Private Sub DataGrid1_PageIndexChanged(ByVal sender As System.Object, ByVal
e As DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
' Ottiene l'ID del record da Modificare
Dim key As String = DataGrid1.DataKeys(e.Item.ItemIndex).ToString()
' Recupera i valorti aggiornati dei campi dal Datagrid
Dim tb As TextBox
'tb = CType(e.Item.Cells(4).Controls(0), TextBox)
Dim Titolo As String = DirectCast(e.Item.FindControl("Titolo"),
TextBox).Text
'Dim Titolo = tb.Text
tb = CType(e.Item.Cells(5).Controls(0), TextBox)
Dim Cantante = tb.Text
tb = CType(e.Item.Cells(6).Controls(0), TextBox)
Dim Album = tb.Text
tb = CType(e.Item.Cells(7).Controls(0), TextBox)
Dim Durata = tb.Text
tb = CType(e.Item.Cells(8).Controls(0), TextBox)
Dim KB = tb.Text
tb = CType(e.Item.Cells(9).Controls(0), TextBox)
Dim Demo = tb.Text
tb = CType(e.Item.Cells(10).Controls(0), TextBox)
' Prepariamo l'aggiornamento del record
If cn.State = ConnectionState.Closed Then cn.Open()
Dim cmd As New OleDbCommand("UPDATE Catalogo SET Titolo=?, Cantante=?,
Album=?, Durata=?, KB=?, Demo=? WHERE ID_Catalogo =?", cn)
cmd.Parameters.Add("Titolo", Titolo)
cmd.Parameters.Add("Cantante", Cantante)
cmd.Parameters.Add("Album", Album)
cmd.Parameters.Add("Durata", Durata)
cmd.Parameters.Add("KB", KB)
cmd.Parameters.Add("Demo", Demo)
cmd.Parameters.Add("ID_Catalogo", key)
If cn.State = ConnectionState.Closed Then cn.Open()
cmd.ExecuteNonQuery()
' Esce dalla modifica e ricollega il controllo
DataGrid1.EditItemIndex = -1
DataGrid1.SelectedIndex = e.Item.ItemIndex
' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub
' Aggiunge il prodotto al carrello dell'utente , se non esiste il carrello
lo crea
Private Sub DataGrid1_SelectRecCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.ItemCommand
' Se l'evento viene invocato x il cambio di pagina
If e.CommandName = "Page" Then Return
If e.CommandName = "SelectRec" Then
Label1.Text = e.CommandName.ToString
Dim RecCorrente As Long = DataGrid1.DataKeys(e.Item.ItemIndex)
Dim ID_Ordine As Long = Session("ID_Ordine")
Dim UtenteCorrente As utente = Session("Login")
If Session("ID_Ordine") Is Nothing Then 'Crea un nuovo ordine
ID_Ordine = ordine.Nuovo(UtenteCorrente.Username)
Session("ID_Ordine") = ID_Ordine
'Aggiunge l'articolo al carrello
If ordine.Aggiungi_Articolo(ID_Ordine, RecCorrente) Then
Server.Transfer("ok.aspx")
Else ' L'utente ha già un carrello della spesa
'Aggiunge l'articolo al carrello
If ordine.Aggiungi_Articolo(ID_Ordine, RecCorrente) Then
Server.Transfer("ok.aspx")
End If
End If
End Sub
Private Sub logout_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles logout.Click
Session.Clear()
Server.Transfer("index.aspx")
End Sub
End Class


Il problema sicuramente non è relativo alla sub , ma viene da qualche altro
evento , anche perchè la sub l'ho presa dalla doc MSDN di MS e prima che
facessi delle modifiche in altre parti del progetto (non chiedermi quali)
funzionava .
Allego tutto il codice .
Public Class catalogo
Inherits 
System.Web.UI.Page

















<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub



InitializeComponent()
End Sub
#End Region



If Not Me.IsPostBack Then

InitCombo()

InitSearchCombo()

FillDataSet(sqlGenerate())
End If

DisabilitaBottoni()
End Sub
'Genera la Stringa SQL
Function sqlGenerate() As String
Dim strSQL As String = "SELECT * FROM Catalogo"
' Se c'è un Genere selzionato
If ComboGeneri.SelectedIndex >= 1 Then
strSQL = "SELECT * FROM Catalogo WHERE Genere = " &
ComboGeneri.SelectedItem.Value
End If
' Se si sta effettuando una ricerca
If tbxricerca.Text <> "" Then
Dim Campo As String = SearchCombo.SelectedItem.Text
Dim Condizione As String = tbxricerca.Text.ToString
strSQL = "SELECT * FROM Catalogo WHERE " & Campo & " LIKE '" & Condizione &
"%'"
' Svuota la textbox
tbxricerca.Text = ""
End If
Return strSQL
End Function
'Setta e Popola il DataGrid
Sub FillDataSet(ByVal strSQL As String)
Dim ds As New DataSet()
' Collega il controllo DataGrid popolando la griglia
DataGrid1.AutoGenerateColumns = False
DataGrid1.DataSource = ds
DataGrid1.DataKeyField = "ID_Catalogo"
' Colonna ID
Dim dgc_id As New BoundColumn()
dgc_id.DataField = "ID_Catalogo"
dgc_id.HeaderText = "Codice"
dgc_id.ItemStyle.Width = New Unit(30)
DataGrid1.Columns.Add(dgc_id)
' Colonna Titolo

dgc_title.DataField = "Titolo"
dgc_title.HeaderText = "Titolo"
DataGrid1.Columns.Add(dgc_title)
' Colonna Cantante

dgc_cantante.DataField = "Cantante"
dgc_cantante.HeaderText = "Cantante"
DataGrid1.Columns.Add(dgc_cantante)
' Colonna Album

dgc_album.DataField = "Album"
dgc_album.HeaderText = "Album"
DataGrid1.Columns.Add(dgc_album)
' Colonna Durata

dgc_durata.DataField = "Durata"
dgc_durata.HeaderText = "Durata"
DataGrid1.Columns.Add(dgc_durata)
' Colonna KB

dgc_KB.DataField = "KB"
dgc_KB.HeaderText = "KB"
DataGrid1.Columns.Add(dgc_KB)
' Colonna Preview

dgc_preview.DataField = "Demo"
dgc_preview.HeaderText = "Preview"
DataGrid1.Columns.Add(dgc_preview)
If cn.State <> ConnectionState.Open Then cn.Open()
Dim Dati As New OleDbDataAdapter(strSQL, cn)
cn.Close()
DisabilitaBottoni()
Dati.Fill(ds)
DataGrid1.DataBind()
End Sub

Sub DisabilitaBottoni()


If Utente.Tipo.Equals(Utente.Tipo_Utente.Registrato) Then

DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False

DataGrid1.Columns(0).Visible = True
LinkButton1.Visible = False
ElseIf Utente.Tipo.Equals(Utente.Tipo_Utente.Amministratore) Then

DataGrid1.Columns(0).Visible = False

End If
Else ' Utente Anonimo
PanelUtente.Visible = False
DataGrid1.Columns(0).Visible = False
DataGrid1.Columns(1).Visible = False
DataGrid1.Columns(2).Visible = False
End If
End Sub

Private Sub InitCombo()
cn.Open()


ComboGeneri.DataSource = dr
ComboGeneri.DataTextField = "Genere"
ComboGeneri.DataValueField = "ID_Genere"
ComboGeneri.DataBind()
dr.Close()
cn.Close()
End Sub

Private Sub InitSearchCombo()
SearchCombo.Items.Add("Titolo")
SearchCombo.Items.Add("Cantante")
SearchCombo.Items.Add("Album")
End Sub

' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub

' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub

Server.Transfer("AddArticolo.aspx")
End Sub

DataGrid1.CurrentPageIndex = e.NewPageIndex
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.CancelCommand
DataGrid1.EditItemIndex = -1
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.UpdateCommand
' Ottiene l'ID del record da Modificare
Dim key As Long = DataGrid1.DataKeys(e.Item.ItemIndex)
' Recupera i valorti aggiornati dei campi dal Datagrid
Dim tb As TextBox
tb = CType(e.Item.Cells(4).Controls(0), TextBox)
Dim Titolo = tb.Text
tb = CType(e.Item.Cells(5).Controls(0), TextBox)
Dim Cantante = tb.Text
tb = CType(e.Item.Cells(6).Controls(0), TextBox)
Dim Album = tb.Text
tb = CType(e.Item.Cells(7).Controls(0), TextBox)
Dim Durata = tb.Text
tb = CType(e.Item.Cells(8).Controls(0), TextBox)
Dim KB = tb.Text
tb = CType(e.Item.Cells(9).Controls(0), TextBox)
Dim Demo = tb.Text
' Prepariamo l'aggiornamento del record
If cn.State = ConnectionState.Closed Then cn.Open()
Dim cmd As New OleDbCommand("UPDATE Catalogo SET Titolo=?, Cantante=?,
Album=?, Durata=?, KB=?, Demo=? WHERE ID_Catalogo =?", cn)
cmd.Parameters.Add("Titolo", Titolo)
cmd.Parameters.Add("Cantante", Cantante)
cmd.Parameters.Add("Album", Album)
cmd.Parameters.Add("Durata", Durata)
cmd.Parameters.Add("KB", KB)
cmd.Parameters.Add("Demo", Demo)
cmd.Parameters.Add("ID_Catalogo", key)
If cn.State = ConnectionState.Closed Then cn.Open()
cmd.ExecuteNonQuery()
' Esce dalla modifica e ricollega il controllo
DataGrid1.EditItemIndex = -1
DataGrid1.SelectedIndex = e.Item.ItemIndex
' Aggiorna il dataset
FillDataSet(sqlGenerate())
End Sub
Private Sub DataGrid1_SelectRecCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataGridCommandEventArgs) Handles
DataGrid1.ItemCommand
' Se l'evento viene invocato x il cambio di pagina
If e.CommandName = "Page" Then Return
'Elimina record
If e.CommandName = "Delete" Then
Dim RecCorrente As Long = DataGrid1.DataKeys(e.Item.ItemIndex)
Dim strSQL = "DELETE FROM Catalogo WHERE ID_Catalogo=" & RecCorrente
If cn.State <> ConnectionState.Open Then cn.Open()
Dim cmd As New OleDbCommand(strSQL, cn)
cmd.ExecuteNonQuery()
cmd.Dispose()
FillDataSet(sqlGenerate())
End If
' Aggiungi Record al carrello
If e.CommandName = "SelectRec" Then
Label1.Text = e.CommandName.ToString
Dim RecCorrente As Long = DataGrid1.DataKeys(e.Item.ItemIndex)
Dim ID_Ordine As Long = Session("ID_Ordine")
Dim UtenteCorrente As utente = Session("Login")
If Session("ID_Ordine") Is Nothing Then 'Crea un nuovo ordine
ID_Ordine = ordine.Nuovo(UtenteCorrente.Username)
Session("ID_Ordine") = ID_Ordine
'Aggiunge l'articolo al carrello
If ordine.Aggiungi_Articolo(ID_Ordine, RecCorrente) Then
Server.Transfer("ok.aspx")
Else ' L'utente ha già un carrello della spesa
'Aggiunge l'articolo al carrello
If ordine.Aggiungi_Articolo(ID_Ordine, RecCorrente) Then
Server.Transfer("ok.aspx")
End If
End If
End Sub
Private Sub logout_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles logout.Click
Session.Clear()
Server.Transfer("index.aspx")
End Sub
End Class
