We help IT Professionals succeed at work.

How to display related tables in a datagridview where data comes from xml file

ChloesDad
ChloesDad asked
on
633 Views
Last Modified: 2013-11-15
Hi fellow experts

I have a database with a main table called Cards which has a related table called Editions.One field in Cards (Edition) is related to the primary key in Editions. The database was originally an access database, and I have converted it into an xml file

I have the code below to populate a datagridview with the data from the cards table. This works Ok, but I just get the edition field being displayed with the codes used in the editions table. How can I get the table to display the full name of the edition which is a field in the editions table.

I'm very familliar with vb.net 2008 but my database manipulation skills are a bit rusty at the moment, so any help will be appreciated


Dim fn As String = "Cards.xml"
        CardsDataSet = New System.Data.DataSet
        CardsDataSet.ReadXmlSchema(fn)
        CardsDataSet.ReadXml(fn)
        Me.DataGridView1.DataSource = CardsDataSet
        DataGridView1.DataMember = "Cards"

Open in new window

Comment
Watch Question

CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2008

Commented:
That is not a problem with a straight-forward solution.  The DataGridView doesn't really support binding to multiple tables, so you need to get all the data together into one table, or use the DataGridView in unbound, virtual mode.

Author

Commented:
Hi TheLearnedOne,

So wgat are my options, Can I create a class with all of the fields as public properties and use that to lookup the actual value from the second table. Each record could then be an element of an arraylist or a hashtable. Can I then link the collection to the datagridview?
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2008
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
Thanks for your prompt reply, I'll give it a go

Author

Commented:
Thanks, that has worked a treat. I now have all my data in the datagrid.

I also have a treeview that I use to create a filter.

I have the following

        Me.DataGridView1.DataSource = CardsList

How can I apply a filter to the data without creating the cardlist again?
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2008

Commented:
Ok, now you are asking for something more complicated :)

Look here for a possible solution:

http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic53718.aspx


Class FilterBindingList(Of T) 
    Inherits BindingList(Of T) 
    Private allItems As New List(Of T)() 
    Private predicate As Predicate(Of T) 
    
    Public Sub Filter(Predicate__1 As Predicate(Of T)) 
        predicate = Predicate__1 
        Filter() 
    End Sub 
    
    Private Sub Filter() 
        MyBase.Items.Clear() 
        For Each obj As T In allItems 
            If (predicate Is Nothing) OrElse predicate(obj) Then 
                MyBase.Items.Add(obj) 
            End If 
        Next 
        OnListChanged(New ListChangedEventArgs(ListChangedType.Reset, -1)) 
    End Sub 
    
    Protected Overloads Overrides Sub InsertItem(index As Integer, item As T) 
        allItems.Add(item) 
        MyBase.InsertItem(index, item) 
    End Sub 
    Protected Overloads Overrides Sub RemoveItem(index As Integer) 
        allItems.Remove(Items(index)) 
        MyBase.RemoveItem(index) 
    End Sub 
    Protected Overloads Overrides Sub ClearItems() 
        allItems.Clear() 
        MyBase.ClearItems() 
    End Sub 
    Protected Overloads Overrides Sub SetItem(index As Integer, item As T) 
        allItems(allItems.IndexOf(Items(index))) = item 
        MyBase.SetItem(index, item) 
    End Sub 
End Class 

Open in new window

Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.