Solved

Vb.net Datatable -> if statement to check if the value exists then amend the table

Posted on 2014-02-05
3
1,935 Views
Last Modified: 2014-02-05
Hi ALL,

Below if the code i have so far and I have 2 questions really....

1) i have an error "BC30311: Value of type 'System.Collections.Generic.IEnumerable(Of System.Data.DataRow)' cannot be converted to 'Boolean'." on row If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then


2) Can i do this with less code and make it quicker/neater?

I have commented the below code to show what i wanted it to do....

      
 	'Check to see if anyrows in HomeTeam contain a value
	 Dim count = scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("HomeTeam").ToString() = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)).Count()
'Find the count
if count = 0 then

'add row to the datatable as no results where found
scorestable.Rows.Add(StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText), div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2) , thescorestext)

else
'A matching result was found so now check to see if the Scores section of the result matches the value - thescorestext

If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then
'Yes it does match the score so we just need to update the column of the row with the correct time
Dim scoresRow() As Data.DataRow
'Make sure i have selected the correct team
scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
'Update the time row'
scoresRow(0)("Time") = div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2)

else

'The score does not match meaning i need to update both the score and the time

Dim scoresRow() As Data.DataRow
'Make sure i have selected the correct team
scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
'update score
scoresRow(0)("Score") = thescorestext
'Update time
scoresRow(0)("Time") = div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2)
end if

end if

Open in new window

0
Comment
Question by:runnerjp2005
3 Comments
 
LVL 62

Accepted Solution

by:
Fernando Soto earned 500 total points
ID: 39835405
Hi runnerjp2005;

In the following If statement the test needs to return a Boolean type.

If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then

Open in new window

The Test
scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext

Open in new window

is missing a ")" at the end of the statement. But even if you put a ")" it returns a Collection of DataRows and NOT a Boolean. You need to change the statement so that it returns a Boolean something like the following.
scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext).Count > 0

Open in new window

0
 

Author Comment

by:runnerjp2005
ID: 39835508
now i get  Identifier expected on scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 39835706
Try following


scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString())(0)("Score") = thescorestext

Another option is to use dataview

scorestable.DefaultView.RowFilter = "Score='" & thescorestext & "'"
if scorestable.DefaultView.Count > 0 Then
   'score found
else
   'not found
End If
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Just a quick little trick I learned recently.  Now that I'm using jQuery with abandon in my asp.net applications, I have grown tired of the following syntax:      (CODE) I suppose it just offends my sense of decency to put inline VBScript on a…
For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now