繁体   English   中英

无法编辑 gridview 购物车 用户控制

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM