I’ve run into a problem recently, hoping you all could help.
I was tasked with creating an application that can take any DataSet, and display it in a series of grids (using something like a tab control).
I was able to do this pretty easily in WPF:
1. Create a WCF Service that returns a DataSet object
2. Create a WPF Window with a DataGrid
3. Bind the DataSet’s DataTables to WPF DataGrids using AutoGenerateColumns=True
Now I have been asked to do it in Silverlight instead. So in essence, I will not know what the table will look like that I get back, so I cannot create a class with properties that can be thrown into a collection and bound. Silverlight will not allow DataSets.
I feel as if this should be a fairly common need for any platform, is there a way to handle this that doesn’t require a massive amount of coding to workaround the limitations?
One solution is to pass the DataSet Column Information and DataSet XML to the silverlight. On the Silverlight side build a Dynamic Data Object based on those data with functions provided by System.Reflection.Emit namespace. Then bind the List of dynamically build DataObject to the DataGrid. The Dynamic Data Object will have one property for each column in the DataSet with the same DataType.
Because we have the Column Information besides the Data, binding to the DataGrid can be very flexible. you can set AutoGeneratedColumn = true so it display all the Data in the DataSet or I can dynamically generate columns I want to display.
You can download the sample source code from here