[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

Filtering an XML file by product name, displaying results in a datalist

Posted on 2013-12-01
2
Medium Priority
?
237 Views
Last Modified: 2013-12-04
I am working in ASP.Net (vb) with a client's XML file (reduced from 319 entries to 3):

 
<?xml version= "1.0"?>
<products>
	<product id="001">
		<division>Division1</division>
		<name>AName</name>
		<model>Model1</model>
		<category></category>
		<datathumbURL>image.jpg</datathumbURL>
		<datasheetURL>document.pdf</datasheetURL>
		<thumbURL>image.png</thumbURL>
		<fullImageURL></fullImageURL>
		<description>Many, many words here</description>
		<contactSnail>address, city, state, zip</contactSnail>
		<contactDigits>phone</contactDigits>
		<contactWebsite>URL</contactWebsite>
	</product>
	<product id="002">
		<division>Division2</division>
		<name>BName</name>
		<model>Model2</model>
		<category></category>
		<datathumbURL>image.jpg</datathumbURL>
		<datasheetURL>document.pdf</datasheetURL>
		<thumbURL>image.png</thumbURL>
		<fullImageURL></fullImageURL>
		<description>many, many words here</description>
		<contactSnail>address, city, state, zip</contactSnail>
		<contactDigits>phone</contactDigits>
		<contactWebsite>URL</contactWebsite>
	</product>
	<product id="003">
		<division>Division3</division>
		<name>CName</name>
		<model>Model3</model>
		<category></category>
		<datathumbURL>image.jpg</datathumbURL>
		<datasheetURL>document.pdf</datasheetURL>
		<thumbURL>image.png</thumbURL>
		<fullImageURL></fullImageURL>
		<description>man, many words here</description>
		<contactSnail>address, city, state, zip</contactSnail>
		<contactDigits>phone</contactDigits>
		<contactWebsite>URL</contactWebsite>
	</product>
</products>

Open in new window


... and have created the sort and display code which works as expected (sorting the list of 319 products by name, division or model):

<script runat="server">
	Sub Page_Load

		dim dsProducts = New DataSet
		dsProducts.ReadXml(MapPath("products.xml"))
		
		Dim sid As String
		sid = Request.QueryString("sid")	
			
		If String.IsNullOrEmpty(Request.QueryString("sid")) Then
			dsProducts.Tables(0).DefaultView.Sort = "name, division, model ASC"			
		Elseif sid = "div" Then
			dsProducts.Tables(0).DefaultView.Sort = "division, name, model ASC"
		Elseif sid = "mod" Then
			dsProducts.Tables(0).DefaultView.Sort = "model, name, division ASC"	
		End If
	
		Dim dsProductsSort = dsProducts.Tables(0).DefaultView.ToTable()
		dlProducts.DataSource = dsProductsSort
		dlProducts.DataBind()
	End sub
</script>

<asp:DataList id="dlProducts" runat="server">
	<ItemTemplate>
		<a href="products-details.aspx?id=<%#Container.DataItem("id")%>" style="color:blue"> <%#Container.DataItem("name")%> | <%#Container.DataItem("model")%></a> | <%#Container.DataItem("division")%> 
	</ItemTemplate>
</asp:DataList>

Open in new window


The client would now like a page that will allow clicking on a letter of the alphabet (A - B - C, etc...) to see a list of product names beginning with that letter.  In the example XML code these are listed as AName, BName and CName.

Ideally, the results would be shown in the same datalist included above.

Easy enough to do using a database - I can't seem to wrap my ahead around making it work using an XML file as the datasource.  Shuffling fields in the XML file is an option if required.

Help?
0
Comment
Question by:henryroark
2 Comments
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 2000 total points
ID: 39689492
You should be able to add a RowFilter to the view based on the letter selected:
Dim filterLetter As String = "A"

...

If String.IsNullOrEmpty(Request.QueryString("sid")) Then
    dsProducts.Tables(0).DefaultView.Sort = "name, division, model ASC"
    dsProducts.Tables(0).DefaultView.RowFilter = "name like '" & filterLetter & "%'"
    ...
End If

Open in new window

0
 

Author Closing Comment

by:henryroark
ID: 39696268
Simple and perfect, thank you.  I had it in mind that it would be a complicated matter.  Knowing about .RowFilter opens up a lot of possibilities.
0

Featured Post

[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
As many of you are aware about Scanpst.exe utility which is owned by Microsoft itself to repair inaccessible or damaged PST files, but the question is do you really think Scanpst.exe is capable to repair all sorts of PST related corruption issues?
This video tutorial shows you the steps to go through to set up what I believe to be the best email app on the android platform to read Exchange mail.  Get the app on your phone: The first step is to make sure you have the Samsung Email app on your …
Suggested Courses

612 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