Click here to Skip to main content
15,886,199 members
Please Sign up or sign in to vote.
4.00/5 (2 votes)
See more:
Hi all. I am using one data table in the data table. I am adding the rows at the time I am getting the error Object reference not set to an instance of an object. Please help me where I did mistakes. My code is following

VB
Protected Sub btnadd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnadd.Click
        GetSelectedRows()
                                                   }"
        Me.ClientScript.RegisterStartupScript(Me.[GetType](), "UpdateParentWindow", "opener.location.reload(); window.close();", True)


    End Sub
 Private Sub GetSelectedRows()
        Dim dt As DataTable
        If Session("ItemTable") Is Nothing Then
            dt = CreateTable()
            Dim dr1 As DataRow = dt.NewRow()
            dr1(0) = txtItemCode.Text
            dr1(1) = txtItemName.Text
            dr1(2) = txtStock.Text
            dr1(3) = txtPrice.Text
            dr1(4) = lblPrice.Text
            dt.Rows.Add(dr1)
        Else
            Dim dr As DataRow = dt.NewRow()'I am getting the Error hear only
            dr(0) = txtItemCode.Text
            dr(1) = txtItemName.Text
            dr(2) = txtStock.Text
            dr(3) = txtPrice.Text
            dr(4) = lblPrice.Text
            dt.Rows.Add(dr)
        End If
        Session("ItemTable") = dt
    End Sub
ublic Function CreateTable() As DataTable
        dt = New DataTable()
        dt.Columns.Add("ItemCode")
        dt.Columns.Add("ItemName")
        dt.Columns.Add("InStock")
        dt.Columns.Add("Price")
        dt.Columns.Add("TotalPrice")
        dt.AcceptChanges()
        Return dt
    End Function
Posted
Updated 28-Aug-13 20:09pm
v2

In the Else block, you do not set dt to anything, and consequently it is still Nothing. I guess
dt = Session("ItemTable")
immediately after the Else will do the trick.
 
Share this answer
 
Change the GetSelectedRows() as below -

VB
Private Sub GetSelectedRows()
        Dim dt As DataTable
        If Session("ItemTable") Is Nothing Then
            dt = CreateTable()
            Dim dr1 As DataRow = dt.NewRow()
            dr1(0) = txtItemCode.Text
            dr1(1) = txtItemName.Text
            dr1(2) = txtStock.Text
            dr1(3) = txtPrice.Text
            dr1(4) = lblPrice.Text
            dt.Rows.Add(dr1)
        Else
            dt = CType(Session("ItemTable"),DataTable) 
            Dim dr As DataRow = dt.NewRow()'I am getting the Error hear only
            dr(0) = txtItemCode.Text
            dr(1) = txtItemName.Text
            dr(2) = txtStock.Text
            dr(3) = txtPrice.Text
            dr(4) = lblPrice.Text
            dt.Rows.Add(dr)
        End If
        Session("ItemTable") = dt
    End Sub
 
Share this answer
 
in getselectedrows function
first line is
Dim dt As DataTable
here you miss the new keyword
so final line will be like this
Dim dt As new DataTable
VB
Protected Sub btnadd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnadd.Click
        GetSelectedRows()
                                                   }"
        Me.ClientScript.RegisterStartupScript(Me.[GetType](), "UpdateParentWindow", "opener.location.reload(); window.close();", True)
 

    End Sub
 Private Sub GetSelectedRows()
        Dim dt As new DataTable ' here you need to put a new keyword 
        If Session("ItemTable") Is Nothing Then
            dt = CreateTable()
            Dim dr1 As DataRow = dt.NewRow()
            dr1(0) = txtItemCode.Text
            dr1(1) = txtItemName.Text
            dr1(2) = txtStock.Text
            dr1(3) = txtPrice.Text
            dr1(4) = lblPrice.Text
            dt.Rows.Add(dr1)
        Else
            dt = Session("ItemTable") 
            Dim dr As DataRow = dt.NewRow()'I am getting the Error hear only
            dr(0) = txtItemCode.Text
            dr(1) = txtItemName.Text
            dr(2) = txtStock.Text
            dr(3) = txtPrice.Text
            dr(4) = lblPrice.Text
            dt.Rows.Add(dr)
        End If
        Session("ItemTable") = dt
    End Sub
ublic Function CreateTable() As DataTable
        dim dt = New DataTable()
        dt.Columns.Add("ItemCode")
        dt.Columns.Add("ItemName")
        dt.Columns.Add("InStock")
        dt.Columns.Add("Price")
        dt.Columns.Add("TotalPrice")
        dt.AcceptChanges()
        Return dt
    End Function


also in CreateTable function
first line just put a dim before dt.
so hope everything gets ok
 
Share this answer
 
v5
Comments
Nitesh Kejriwal 29-Aug-13 2:51am    
Just adding the new operator in the declaration statement will have adverse affect as the user wants to add a new row in the existing datatable.
Hasan Habib Surzo 29-Aug-13 2:58am    
as Session("ItemTable") veriable used here put
dt = Session("ItemTable") after else. I update the code.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900