Buongiorno a tutti,
ho quasi ultimato il mio "carrello" e sono bloccato nel implementare la possibilità di fare delete di una singola riga (un prodotto) o poterne modificare la quantità.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Height="278px"
Width="540px" BackColor="Aqua" ShowFooter="True" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="50" >
<ItemStyle Width="50px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="NomeProdotto" HeaderText="Nome" ItemStyle-Width="150" >
<ItemStyle Width="150px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="PrezzoProdotto" HeaderText="PrezzoProdotto"
ItemStyle-Width="150" DataFormatString="{0:N2}" ItemStyle-HorizontalAlign="Right" >
<ItemStyle Width="150px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="Quantità" HeaderText="Quantità" ItemStyle-Width="150" >
<ItemStyle Width="150px"></ItemStyle>
</asp:BoundField>
</Columns>
</asp:GridView>
VB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Al load nasconde tutto il pannello contenente i dati richiesti al utente per la conferma ordine + spedizione.
Panel1.Visible = False
' Fix creava doppioni al inserimento di nuovi item
If Not Me.IsPostBack Then
Me.BindGrid()
End If
' Ok
' Label che mostra il totale
Label2.Text = GridView1.FooterRow.Cells(2).Text
' Totale spesa in session
Session("vartotspesa") = Label2.Text
' Oppure direttamente ...
Session("ValoreCarrello") = GridView1.FooterRow.Cells(2).Text
End Sub
Protected Sub BindGrid()
Dim constr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
Dim con As New SqlConnection()
con.ConnectionString = constr
con.Open()
' Query SQL
Using cmd As New SqlCommand("SELECT Id,NomeProdotto,PrezzoProdotto,Quantità FROM aProdotti WHERE ID=" & Request.QueryString("ID").ToString & "", con)
Using sda As New SqlDataAdapter(cmd)
Dim dt As New DataTable()
sda.Fill(dt)
Dim SessionDt As New DataTable()
SessionDt = Session("dt")
If Not SessionDt Is Nothing Then
If (dt.Rows.Count > 0) Then
Dim dr As DataRow
dr = SessionDt.NewRow()
dr("Id") = dt.Rows(0)("Id").ToString()
dr("NomeProdotto") = dt.Rows(0)("NomeProdotto").ToString
dr("PrezzoProdotto") = dt.Rows(0)("PrezzoProdotto").ToString
dr("Quantità") = dt.Rows(0)("Quantità").ToString
SessionDt.Rows.Add(dr)
End If
Session("dt") = SessionDt
GridView1.DataSource = SessionDt
GridView1.DataBind()
'Calcola la somma e la mostra nel footer row
Dim total As Decimal = SessionDt.AsEnumerable().Sum(Function(row) row.Field(Of Decimal)("PrezzoProdotto"))
GridView1.FooterRow.Cells(1).Text = "Totale :"
GridView1.FooterRow.Cells(1).HorizontalAlign = HorizontalAlign.Right
GridView1.FooterRow.Cells(2).Text = total.ToString("N2")
GridView1.FooterRow.BackColor = Drawing.Color.LightYellow
GridView1.FooterRow.BorderStyle = BorderStyle.Solid
Else
Session("dt") = dt
GridView1.DataSource = dt
GridView1.DataBind()
'Calcola la somma e la mostra nel footer row
Dim total As Decimal = dt.AsEnumerable().Sum(Function(row) row.Field(Of Decimal)("PrezzoProdotto"))
GridView1.FooterRow.Cells(1).Text = "Totale :"
GridView1.FooterRow.Cells(1).HorizontalAlign = HorizontalAlign.Right
GridView1.FooterRow.Cells(2).Text = total.ToString("N2")
GridView1.FooterRow.BackColor = Drawing.Color.LightYellow
GridView1.FooterRow.BorderStyle = BorderStyle.Solid
End If
End Using
End Using
End Sub
Ho provato a implementare questo , adattando anche l' html ma non mi funzionava, il problema credo sia dovuto al lanciarsi del metodo bind grid e non ri effettua correttamente la ri popolazione della table e grid view.
Non riesco a venirne fuori.
'Protected Sub OnRowEditing(sender As Object, e As GridViewEditEventArgs)
' GridView1.EditIndex = e.NewEditIndex
' Me.BindGrid()
'End Sub
'Protected Sub OnUpdate(sender As Object, e As EventArgs)
' Dim row As GridViewRow = TryCast(TryCast(sender, LinkButton).NamingContainer, GridViewRow)
' Dim ID As String = TryCast(row.Cells(1).Controls(0), TextBox).Text
' Dim NomeProdotto As String = TryCast(row.Cells(2).Controls(0), TextBox).Text
' Dim PrezzoProdotto As String = TryCast(row.Cells(3).Controls(0), TextBox).Text
' Dim Quantità As String = TryCast(row.Cells(4).Controls(0), TextBox).Text
' Dim dt As DataTable = TryCast(ViewState("dt"), DataTable)
' dt.Rows(row.RowIndex)("ID") = ID
' dt.Rows(row.RowIndex)("NomeProdotto") = NomeProdotto
' dt.Rows(row.RowIndex)("PrezzoProdotto") = PrezzoProdotto
' dt.Rows(row.RowIndex)("Nome") = Quantità
' ViewState("dt") = dt
' GridView1.EditIndex = -1
' Me.BindGrid()
'End Sub
'Protected Sub OnCancel(sender As Object, e As EventArgs)
' GridView1.EditIndex = -1
' Me.BindGrid()
'End Sub
Ho provato anche con altre tutorial , materiale dal web ma non riesco proprio ad adattare il mio progetto a questa implementazione.
Grazie a tutti in anticipo