[英]Can't edit gridview Shopping Cart User control
在我的母版页中,我有一个包含更新面板的 div,其中我嵌套了购物车 gridview 用户控件,通过单击查看购物车按钮来显示和隐藏 div。 从产品页面将新产品添加到购物车时,当我单击购物车视图按钮时,购物车 gridview 在 div 中正确显示。 但是,当我单击编辑按钮或单击 gridview 模板字段中的删除按钮时,我根本无法编辑 gridview。 这是我的代码:
//Master page partial
<%--CART USER CONTROL--%>
<div class="cartbar">
<div class="text">CART CONTENTS</div>
<div>
<%--Use updatepanel to refresh the Cart user control without refreshing the page, trigger
the refresh when cliciking on the Cart icon.--%>
<asp:UpdatePanel ID="cartpanel" runat="server" UpdateMode="always">
<ContentTemplate>
<uc:MyCart ID="shopcart" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnCart" EventName="click"/>
</Triggers>
</asp:UpdatePanel>
</div>
</div>
<%--END CART MODULE--%>
//Product Page partial
<%--BUTTONS AND COUNTER--%>
<div class="d-inline-flex justify-content-between col-10 align-items-center mt-2">
<div style="overflow:hidden;"><asp:LinkButton ID="btnview" runat="server"
OnClick="View"><asp:Image ID="info" runat="server" ImageUrl="~/images/Info.png" />
</asp:LinkButton></div>
<asp:LinkButton ID="Button2" runat="server" CommandName="Ret"><i class="fas fa-
caret-down fa-2x align-bottom"></i></asp:LinkButton>
<asp:TextBox ID="txbCount" runat="server" CssClass="counter" />
<asp:LinkButton ID="Button1" runat="server" CommandName="Add"><i class="fas fa-
caret-up fa-2x align-bottom"></i></asp:LinkButton>
<div style="overflow:hidden;"><asp:LinkButton ID="btnCart" runat="server"
OnClick="AddtoCart"><asp:Image ID="cartimg" runat="server"
ImageUrl="~/images/Cart.png" /></asp:LinkButton></div>
</div>
Protected Sub AddToCart(ByVal sender As Object, ByVal e As EventArgs)
Dim item As ListViewItem = TryCast((TryCast(sender, LinkButton)).NamingContainer, ListViewItem)
Dim idValue As String = lvProdList.DataKeys(item.DataItemIndex).Value.ToString()
Dim pcode As String = TryCast(item.FindControl("lblProdCode"), Label).Text
Dim pdesc As String = TryCast(item.FindControl("lblProdDesc"), Label).Text
Dim pQty As String = TryCast(item.FindControl("txbCount"), TextBox).Text
Dim pPrice As String = TryCast(item.FindControl("lblPrice"), Label).Text
Dim barcode As String = TryCast(item.FindControl("lblBarcode"), Label).Text
Dim pUnit As String = TryCast(item.FindControl("lblUnit"), Label).Text
If TryCast(item.FindControl("txbCount"), TextBox).Text = 0 Then
DBMsg.Visible = True
DBMsg.InnerHtml = "YOU NEED TO SELECT A QUANTITY"
Else
Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)
Dim myCom As SqlCommand = New SqlCommand("AddtoCart", myConn)
myCom.CommandText = "AddtoCart"
myCom.CommandType = CommandType.StoredProcedure
myCom.Parameters.AddWithValue("@nbItems", SqlDbType.Int).Direction = ParameterDirection.Output
myCom.Parameters.AddWithValue("@UserID", SqlDbType.NVarChar).Value = Session("UserID").ToString
myCom.Parameters.AddWithValue("@UserNB", SqlDbType.Int).Value = Session("UserNB")
myCom.Parameters.AddWithValue("@SessionID", SqlDbType.NVarChar).Value = HttpContext.Current.Session.SessionID
myCom.Parameters.AddWithValue("@ProdID", SqlDbType.Int).Value = idValue
myCom.Parameters.AddWithValue("@ProdCode", SqlDbType.NVarChar).Value = pcode
myCom.Parameters.AddWithValue("@ProdDesc", SqlDbType.NVarChar).Value = pdesc
myCom.Parameters.AddWithValue("@Quantity", SqlDbType.Int).Value = pQty
myCom.Parameters.AddWithValue("@SellingPrice", SqlDbType.NVarChar).Value = pPrice
myCom.Parameters.AddWithValue("@Barcode", SqlDbType.NVarChar).Value = barcode
myCom.Parameters.AddWithValue("@Unit", SqlDbType.NVarChar).Value = pUnit
myCom.Parameters.AddWithValue("RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
Try
myConn.Open()
myCom.ExecuteNonQuery()
myConn.Close()
Dim intResult As Integer = myCom.Parameters("RETURN_VALUE").Value
If intResult = 1 Then
cartarrow.Visible = True
cartMsg.Visible = True
cartMsg.InnerHtml = myCom.Parameters("@Quantity").Value & " items added to cart!"
divCounter.InnerHtml = myCom.Parameters("@nbItems").Value
TryCast(item.FindControl("txbCount"), TextBox).Text = 0
Else
cartarrow.Visible = True
cartMsg.Visible = True
cartMsg.InnerHtml = "Quantity updated in cart!"
divCounter.InnerHtml = myCom.Parameters("@nbItems").Value
TryCast(item.FindControl("txbCount"), TextBox).Text = 0
End If
Catch objError As Exception
DBMsg.Visible = True
DBMsg.InnerHtml = "Error accessing database here.<br />" _
& objError.Message & "<br />" & objError.Source _
& objError.StackTrace
Exit Sub
End Try
End If
End Sub
//Shopping Cart User Control
<div>
<asp:UpdatePanel ID="cartpanel" runat="server" UpdateMode="always">
<ContentTemplate>
<asp:GridView ID="GridCart" runat="server" AutoGenerateColumns="False" DataKeyNames="CartID"
ShowFooter="True" CssClass="gridcart" OnRowDeleting="GridDelete" >
<Columns>
<asp:TemplateField HeaderStyle-CssClass="HiddenCol">
<ItemTemplate><asp:Label id="lblCartID" runat="server" Text='<%#Eval("CartID")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>#</HeaderTemplate>
<ItemTemplate><div style="width:15px;text-align:center;"><asp:Label iD="lblRow" runat="server"
Text='<%#Eval("Row#")%>' CssClass="cartitems" /></div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="HiddenCol" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>DESCRIPTION</HeaderTemplate>
<ItemTemplate><div style="width:180px;"><asp:Label iD="lblProdDesc" runat="server"
Text='<%#Eval("ProddESC")%>' CssClass="cartitems" /></div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>QTY</HeaderTemplate>
<ItemTemplate><div style="width:50px;"><asp:textbox id="txbQTY" runat="server"
Text='<%#Eval("Quantity")%>' CssClass="cartitems"
style="border:none;background:#242424;width:50px;text-align:center;" />
</div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>Unit</HeaderTemplate>
<ItemTemplate><div style="width:30px;text-align:center;"><asp:Label iD="lblUnit"
runat="server" Text='<%#Eval("Unit")%>' CssClass="cartitems" /></div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>PRICE</HeaderTemplate>
<ItemTemplate><div style="width:55px;text-align:center;"><asp:Label iD="lblPrice"
runat="server" Text='<%#Eval("SellingPrice")%>' CssClass="cartitems" /></div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>AMOUNT</HeaderTemplate>
<ItemTemplate><div style="width:70px;text-align:center;"><asp:Label iD="lblAmount"
runat="server" Text='<%#Eval("total")%>' CssClass="cartitems" /></div></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="cartheader"><ItemStyle CssClass="cartrow" />
<FooterStyle CssClass="cartfooter" />
<HeaderTemplate>DEL</HeaderTemplate>
<ItemTemplate>
<div style="width:15px;text-align:center;">
<asp:ImageButton ID="btnDel" runat="server" ImageUrl="~/Images/Trash.png"
CommandArgument='<%#Eval("CartID") %>' CommandName="Delete" CausesValidation="false"
CssClass="gridBtn" OnClick="btnDel_Click" />
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PopulateCart()
End Sub
Sub PopulateCart()
Dim myConn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)
Dim myCommand As SqlCommand = New SqlCommand("GetCartItems", myConn)
myCommand.CommandText = "GetCartItems"
myCommand.CommandType = CommandType.StoredProcedure
myCommand.Parameters.AddWithValue("@SessionUser", SqlDbType.NVarChar).Value = Session("UserID").ToString
myCommand.Parameters.AddWithValue("@SessionID", SqlDbType.NVarChar).Value = HttpContext.Current.Session.SessionID
Try
myConn.Open()
Dim myAdapter As SqlDataAdapter = New SqlDataAdapter(myCommand)
Dim myDT As DataTable = New DataTable
myAdapter.Fill(myDT)
If Not myDT.Rows.Count = 0 Then
GridCart.DataSource = myDT
GridCart.DataBind()
'Merge footer columns
GridCart.FooterRow.Cells(1).ColumnSpan = 2
GridCart.FooterRow.Cells(3).ColumnSpan = 3
'Calculate Sum And display in Footer Row
Dim total As Decimal = myDT.AsEnumerable().Sum(Function(row) row.Field(Of Decimal)("total"))
GridCart.FooterRow.Cells(1).Text = "TOTAL BILL :"
GridCart.FooterRow.Cells(1).HorizontalAlign = HorizontalAlign.Center
GridCart.FooterRow.Cells(3).Text = total.ToString("N2")
GridCart.FooterRow.Cells(3).HorizontalAlign = HorizontalAlign.Center
CartMSG.Visible = False
Else
CartMSG.Visible = True
CartMSG.InnerHtml = "YOUR CART IS EMPTY!"
End If
Catch objError As Exception
DBMsg.InnerHtml = "<font color='red' size='4'>NO ITEMS IN CART!</ font>" _
& objError.Message & "<br />" & objError.Source _
& objError.StackTrace
Exit Sub
Finally
myConn.Close()
End Try
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.