Bound DataGrid using nested XML

  • Thread starter Thread starter Christopher Jedlicka
  • Start date Start date
C

Christopher Jedlicka

Hi,

I am trying to use a datagrid control to display hierarchical data in
a flat format essentially in a master-detail relationship. i.e.

<Data>
<Customer CustomerName="Customer1">
<Order OrderNumber="1">
<Item ItemName="Item1"></Item>
<Item ItemName="Item2"></Item>
</Order>
<Order OrderNumber="2">
<Item ItemName="Item3"></Item>
<Item ItemName="Item4"></Item>
</Order>
</Customer>
<Customer CustomerName="Customer2">
<Order OrderNumber="3">
<Item ItemName="Item1"></Item>
<Item ItemName="Item2"></Item>
</Order>
</Customer>
</Data>

When I load the xml data into the dataset, .NET creates the
relationships for me. My confusion happens when I bind this data to
my datagrid. I have set AutoGenerateColumns to false and manually
added each column. I can't seem to figure out how to set the
DataField for relational columns. i.e.

DataSet ds = new DataSet();
DataGrid dg = new DataGrid();
BoundColumn colCustomerName = new BoundColumn();
BoundColumn colOrderNumber = new BoundColumn();
BoundColumn colItemName = new BoundColumn();

ds.ReadXml("Data.xml", XmlReadMode.InferSchema);

colCustomerName.DataField =
ds.Tables["Customer"].Columns["CustomerName"].toString();
colOrderNumber.DataField =
ds.Tables["Order"].Columns["OrderNumber"].toString();
colItemName.DataField =
ds.Tables[Item].Columns["ItemName"].toString();

dg.DataSource = ds;
dg.DataBind();

I tried to build in the relationships by doing this a little bit
different, but this didn't seem to work either:

colCustomerName.DataField =
ds.Relations["Customer_Order"].ParentTable.Columns["CustomerName"].toString();
colOrderNumber.DataField =
ds.Relations["Order_Item"].ParentTable.Columns["OrderNumber"].toString();
colItemName.DataField = "ItemName";

dg.DataSource = ds;
dg.DataMember = "Item";
dg.DataBind();

How do I have to reference the DataSource and DataField properties to
display this relational data? I'd be especially grateful for any
assistance. Thanks.

-Chris
 
Thanks.. I think the solution you offered will probably work for me.
What I had really hoped to accomplish in this particular project
though, was more of a "flat" display of the data using just a single
datagrid. i.e.

Customer Name | Order Number | Item Name
--------------------------------------------
Customer 1 | Order 1 | Item 1
Customer 1 | Order 1 | Item 2
Customer 1 | Order 2 | Item 3
Customer 1 | Order 2 | Item 4
Customer 2 | Order 3 | Item 1
Customer 2 | Order 3 | Item 2

Can this be done, or is it necessary to nest additional datagrids as
in your example?

-Chris
 
Back
Top