Object reference not set to an instance of an object. .......... Error .... Please Help

  • Thread starter Thread starter Sean
  • Start date Start date
S

Sean

Hi,

I am facing a problem, and i don't know why the error is being generated.

I am updating a datagrid with an XML file.

My code is

Protected Sub UpdateCommand(ByVal Sender As Object, ByVal E As DataGridCommandEventArgs)
Try
Dim deletekey As String
dgpayer.EditItemIndex = -1
deletekey = dgpayer.DataKeys(CInt(E.Item.ItemIndex))

' these are the 4 new edited values
Dim newpaymentamount As String = (CType(E.Item.FindControl("txtepaymentamount"), TextBox).Text)
Dim newpaymentreference As String = (CType(E.Item.FindControl("txtepaymentreference"), TextBox).Text)
Dim newcomment As String = (CType(E.Item.FindControl("txtecomment"), TextBox).Text)
Dim newdatetime As String = (CType(E.Item.FindControl("txtedatetime"), TextBox).Text)
' Response.Write(newcomment)
'load the XML
Dim doc As New XmlDocument()
doc.Load("c:\Inetpub\wwwroot\Cashier\cashier.xml")

Dim node As XmlElement = doc.SelectSingleNode("cashier/tag[@section=payer-" & lbunique.Text & "']")

' setting the attributes to the xml node to replace the values with the new ones
node.SetAttribute("payment_amount", newpaymentamount)
node.SetAttribute("payment_reference", newpaymentreference)
node.SetAttribute("comment", newcomment)
node.SetAttribute("datetime", newdatetime)

' save the xml
doc.Save("c:\Inetpub\wwwroot\Cashier\cashier.xml")

'display the datagrid
viewgrid()


Catch Exc As Exception
lbError.Text = "Update DataGrid Error: " & Exc.Message
End Try
End Sub

And my XML file is

<?xml version="1.0" standalone="yes"?>
<cashier>
<tag param1="payer-16" param2="Reeves" param3="1" param4="324" payment_amount="123.00" payment_reference="123" comment="asf" datetime="7/8/2003" />
<tag param1="payer-14" param2="Johnny" param3="3" param4="345" payment_amount="113.00" payment_reference="123" comment="asf" datetime="7/8/2003" />
<tag param1="payer-14" param2="Joahns" param3="2" param4="325" payment_amount="135.00" payment_reference="123" comment="asf" datetime="7/8/2003" />
</cashier>

The error is generated why i set the attributes to replace the old values with the new ones.

The error message is 'Object reference not set to an instance of an object.'

Any help is appreciated.
 
The error is thrown because you are not finding any nodes when you call the
following line..

Dim node As XmlElement = doc.SelectSingleNode("cashier/tag[@section=payer-"
& lbunique.Text & "']")

It looks like your XPath query is not correct. I don't see an attribute
called 'section' in your xml.

Chad

Hi,

I am facing a problem, and i don't know why the error is being generated.

I am updating a datagrid with an XML file.

My code is

Protected Sub UpdateCommand(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
Try
Dim deletekey As String
dgpayer.EditItemIndex = -1
deletekey = dgpayer.DataKeys(CInt(E.Item.ItemIndex))

' these are the 4 new edited values
Dim newpaymentamount As String =
(CType(E.Item.FindControl("txtepaymentamount"), TextBox).Text)
Dim newpaymentreference As String =
(CType(E.Item.FindControl("txtepaymentreference"), TextBox).Text)
Dim newcomment As String =
(CType(E.Item.FindControl("txtecomment"), TextBox).Text)
Dim newdatetime As String =
(CType(E.Item.FindControl("txtedatetime"), TextBox).Text)
' Response.Write(newcomment)
'load the XML
Dim doc As New XmlDocument()
doc.Load("c:\Inetpub\wwwroot\Cashier\cashier.xml")

Dim node As XmlElement =
doc.SelectSingleNode("cashier/tag[@section=payer-" & lbunique.Text & "']")

' setting the attributes to the xml node to replace the values
with the new ones
node.SetAttribute("payment_amount", newpaymentamount)
node.SetAttribute("payment_reference", newpaymentreference)
node.SetAttribute("comment", newcomment)
node.SetAttribute("datetime", newdatetime)

' save the xml
doc.Save("c:\Inetpub\wwwroot\Cashier\cashier.xml")

'display the datagrid
viewgrid()


Catch Exc As Exception
lbError.Text = "Update DataGrid Error: " & Exc.Message
End Try
End Sub

And my XML file is

<?xml version="1.0" standalone="yes"?>
<cashier>
<tag param1="payer-16" param2="Reeves" param3="1" param4="324"
payment_amount="123.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
<tag param1="payer-14" param2="Johnny" param3="3" param4="345"
payment_amount="113.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
<tag param1="payer-14" param2="Joahns" param3="2" param4="325"
payment_amount="135.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
</cashier>

The error is generated why i set the attributes to replace the old values
with the new ones.

The error message is 'Object reference not set to an instance of an
object.'

Any help is appreciated.
 
Sorry,

i did make a change to the xml file.

the xml file is

<?xml version="1.0" standalone="yes"?>
<cashier>
<tag section="work-14" param2="123" param2="NOTARY" param3="7/9/2003 08:00
AM" param5="PENDING" param6="3" param7="1000341" />
<tag Section="payer-14" param2="New York" param2="1" param3="CHECK/MO"
payment_amount="123.00" payment_reference="12" param4="No" comment="asdf"
datetime="7/9/2003" />
</cashier>

phew, it worked.

now, the problem is that there is no unique key in the xml file, so it
replaces the first occurance of the payer attribute.

Should i change the xml file, in order to generate a unique field to each of
the tags, or should i combine the elements in the SelectSingleNode into
'and' statement ?

Just wondering what is the better approach.
Dim node As XmlElement =
doc.SelectSingleNode("cashier/tag[@Section='payerinformation-" &
lbunique.Text & "']")




Chad Tamplin said:
The error is thrown because you are not finding any nodes when you call the
following line..

Dim node As XmlElement = doc.SelectSingleNode("cashier/tag[@section=payer-"
& lbunique.Text & "']")

It looks like your XPath query is not correct. I don't see an attribute
called 'section' in your xml.

Chad

Hi,

I am facing a problem, and i don't know why the error is being generated.

I am updating a datagrid with an XML file.

My code is

Protected Sub UpdateCommand(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
Try
Dim deletekey As String
dgpayer.EditItemIndex = -1
deletekey = dgpayer.DataKeys(CInt(E.Item.ItemIndex))

' these are the 4 new edited values
Dim newpaymentamount As String =
(CType(E.Item.FindControl("txtepaymentamount"), TextBox).Text)
Dim newpaymentreference As String =
(CType(E.Item.FindControl("txtepaymentreference"), TextBox).Text)
Dim newcomment As String =
(CType(E.Item.FindControl("txtecomment"), TextBox).Text)
Dim newdatetime As String =
(CType(E.Item.FindControl("txtedatetime"), TextBox).Text)
' Response.Write(newcomment)
'load the XML
Dim doc As New XmlDocument()
doc.Load("c:\Inetpub\wwwroot\Cashier\cashier.xml")

Dim node As XmlElement =
doc.SelectSingleNode("cashier/tag[@section=payer-" & lbunique.Text & "']")

' setting the attributes to the xml node to replace the values
with the new ones
node.SetAttribute("payment_amount", newpaymentamount)
node.SetAttribute("payment_reference", newpaymentreference)
node.SetAttribute("comment", newcomment)
node.SetAttribute("datetime", newdatetime)

' save the xml
doc.Save("c:\Inetpub\wwwroot\Cashier\cashier.xml")

'display the datagrid
viewgrid()


Catch Exc As Exception
lbError.Text = "Update DataGrid Error: " & Exc.Message
End Try
End Sub

And my XML file is

<?xml version="1.0" standalone="yes"?>
<cashier>
<tag param1="payer-16" param2="Reeves" param3="1" param4="324"
payment_amount="123.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
<tag param1="payer-14" param2="Johnny" param3="3" param4="345"
payment_amount="113.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
<tag param1="payer-14" param2="Joahns" param3="2" param4="325"
payment_amount="135.00" payment_reference="123" comment="asf"
datetime="7/8/2003" />
</cashier>

The error is generated why i set the attributes to replace the old values
with the new ones.

The error message is 'Object reference not set to an instance of an
object.'

Any help is appreciated.
 
Back
Top