StrataFrame Forum

Master-Detail grid bound to a BO

http://forum.strataframe.net/Topic2965.aspx

By Andria Jensen - 9/21/2006

I would like to use a master-detail grid view for my DevExpress grid, but still use a BO or a BusinessBindingSource for the DataSource.  How do I setup the Master/Detail relationship in the BO so that it works in the grid correctly?  It has to know somehow which fields to use in the master view and which in the detail.
By StrataFrame Team - 9/21/2006

I think you can use the Master-Detail grid with multiple data sources, like a parent & child.  There have been some more changes to the BusinessBindingSource so that it will support the ICurrencyManagerProvider interface better that might help you with configuring your grid.
By Andria Jensen - 9/21/2006

The way that they show it working is that you set some kind of ChildRelations property on the DataTable that you are setting as the DataSource for the grid.  This determines which columns are treated as master and which as detail on the DevExpress side.  I'm having some trouble finding any kind of ChildRelations collection on the BO. 
By Andria Jensen - 9/21/2006

I've tried this but I get an error saying Cannot create a DataRelation if Parent or Child Columns are not in a DataSet.

BusinessObject.CurrentDataTable.ChildRelations.Add("ListRelation", CalcClientBO.CurrentDataTable.Columns("ClientKey"), ClientInfoBO.CurrentDataTable.Columns("ClientKey"))

grdList.DataSource = BusinessObject.CurrentDataTable

Any ideas on anything else I can try?

By StrataFrame Team - 9/22/2006

No, I'm not sure what else you can try... you might have to create your own DataSet object and add the CurrentDataTables from the business objects you want to include in the grid.  Then, you should be able to display them in the grid, although, you will probably need to set the DataSet as the data source, not one of the business objects.
By Andria Jensen - 9/22/2006

Yep, here's what I ended up having to do to get it working:

Dim ds As New DataSet
Me.CalcClientBO.FillAll()
Me.ClientInfoBO.FillAll()

ds.Tables.Add(CalcClientBO.CurrentDataTable)
ds.Tables.Add(ClientInfoBO.CurrentDataTable)
ds.Relations.Add(
"ListRelation", ds.Tables(0).Columns("ClientKey"), ds.Tables(1).Columns("ClientKey"), False)

grdList.DataSource = ds.Tables(0)
grdList.LevelTree.Nodes.Add(
"ListRelation", gvListDtl)
grdList.RefreshDataSource()

It would be a lot easier if somehow the ParentRelationship set on the Parent/Child BO's could somehow create this relationship for you, so that you could still just set the BusinessBindingSource or the CurrentDataTable of the BO to the DataSource.

 

By StrataFrame Team - 9/26/2006

The problem with the BOs being able to do this automatically, is that the DataTables have to belong to a DataSet in order to define the relationships on them.