2011-02-07 6 views
0

나는 VB 백엔드가있는 asp.net에서 매우 간단한 장바구니를 작성하고 있지만 코드에 문제가 있습니다. 응용 프로그램을 실행하고 장바구니에 제품을 추가하려고 할 때 오류 메시지가 나타납니다.ASP.NET 쇼핑 카트

Object reference not set to an instance of an object. 

설명 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

소스 오류 :

Line 27:   Dim blnMatch As Boolean = False 
Line 28: 
Line 29:   For Each Me.objDR In objDT.Rows 
Line 30:    If objDR("StockItemName") = Product Then 
Line 31:     objDR("Quantity") += txtQuantity.Text 

내가이 일을하고 아마도 누군가를 살펴보고 몇 가지 조언을 제공 할 수있을 것으로 기대 이유를 확실하지 않다? 나는 내 코드를 확인했는데 잘못된 것을 발견 할 수는 없다.

여기 내 코드입니다.

Shoppingcart.aspx

<asp:DropDownList id="ddlProducts" runat="server"> 

양말 바지 셔츠 모자
수량 :






총 :

Shoppingcart.aspx.vb 수입 System.Data 부분 공개 수업은 shoppingCart

Dim objDT As System.Data.DataTable 
Dim objDR As System.Data.DataRow 
Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs) 
    If Not IsPostBack Then 
     makeCart() 
    End If 
End Sub 
'Mark Cart function 
Function makeCart() 
    objDT = CType(Session("Cart"), DataTable) 
    objDT.Columns.Add("StockID", GetType(Integer)) 
    objDT.Columns("StockID").AutoIncrement = True 
    objDT.Columns("StockID").AutoIncrementSeed = 1 

    objDT.Columns.Add("StockItemName", GetType(String)) 
    objDT.Columns.Add("StockItemValue", GetType(Decimal)) 
    Session("Cart") = objDT 
End Function 
'This is for adding items to the shopping cart. 
Sub AddToCart(ByVal s As Object, ByVal e As EventArgs) 
    objDT = Session("Cart") 
    Dim Product As String = ddlProducts.SelectedItem.Text 
    Dim blnMatch As Boolean = False 

    For Each Me.objDR In objDT.Rows 
     If objDR("StockItemName") = Product Then 
      objDR("Quantity") += txtQuantity.Text 
      blnMatch = True 
      Exit For 
     End If 
    Next 

    If Not blnMatch Then 
     objDR = objDT.NewRow 
     objDR("Quantity") = txtQuantity.Text 
     objDR("StockItemName") = ddlProducts.SelectedItem.Text 
     objDR("StockItemValue") = Decimal.Parse(ddlProducts.SelectedItem.Value) 
     objDT.Rows.Add(objDR) 
     Session("Cart") = objDT 
    End If 

    dg.DataSource = objDT 
    dg.DataBind() 
End Sub 
Function GetItemTotal() As Decimal 
    Dim intCounter As Integer 
    Dim decRunningTotal As Decimal 

    For intCounter = 0 To objDT.Rows.Count - 1 
     objDR = objDT.Rows(intCounter) 
     decRunningTotal += (objDR("StockItemValue") * objDR("Quantity")) 
    Next 

    Return decRunningTotal 
End Function 
Sub Delete_Item(ByVal s As Object, ByVal e As DataGridCommandEventArgs) 

    objDT = Session("Cart") 
    objDT.Rows(e.Item.ItemIndex).Delete() 
    Session("Cart") = objDT 

    dg.DataSource = objDT 
    dg.DataBind() 
    lblTotal.Text = "$" & GetItemTotal() 
End Sub 

최종 클래스

+0

정말 널 세션에서 카트 아닌가? –

답변

0
상속 System.Web.UI.Page

나는 당신의 코드를 복사하고 그것을 두 번이나 실행하고 그것을 firgured했다. 처음 페이지로드 세션 ("장바구니")에 아무 것도 없습니다. DataTable에 새 열을 추가 할 때 개체 참조 오류가 발생합니다.

같은 세션 ("장바구니")로 DataTable을 동일하게 설정 :

objDT = CType(Session("Cart"), DataTable) 

그것을 아무것도의 가치를 제공 할 것입니다. 대신, inital 페이지로드에서이 작업을 수행 : 세션 ("장바구니")을 설정 한 후에는 이전처럼

objDT = New Data.DataTable 

("장바구니") 세션에 DataTable을 동일하게 설정할 수 있습니다.

전체 기능 :

Function makeCart() 
    objDT = New Data.DataTable 
    objDT.Columns.Add("StockID", GetType(Integer)) 
    objDT.Columns("StockID").AutoIncrement = True 
    objDT.Columns("StockID").AutoIncrementSeed = 1 

    objDT.Columns.Add("StockItemName", GetType(String)) 
    objDT.Columns.Add("StockItemValue", GetType(Decimal)) 
    Session("Cart") = objDT 
End Function 
관련 문제