I can't find a solution to hierarchical grid, could some please post sample code on how I can make it work.
I have 2 bands in the aspx page, with my colums in the first band. I am binding the grid to a datatable, this works I see the data. But I dont see or know how to show the plus or expand column, which when expanded will show or expand an area where I want to display a FormView.
Thanks
Here's how I populated a four-level hierarchical grid from four SqlDataReaders:
In the designer, I defined all my bands and columns, and turned AutoGenerateColumns off.
In my Page_Load:
Me.TenantListUltraWebGrid.DataSource = GetIpmRehabTenantDataset(Me.ProjectId, Me.IncludeFormerTenants)Me.TenantListUltraWebGrid.DataBind()
Which uses this function:
Dim lResult As New DataSet("TenantDataset")
Dim lTenantFamilyTable As New DataTable("Families") lResult.Tables.Add(lTenantFamilyTable) lResult.Tables("Families").Load(GetIpmRehabFamiliesByPropertyId(ProjectId, vIncludeFormerTenants)) lResult.Relations.Add(lResult.Tables("Units").Columns("UNIT_ID"), _ lResult.Tables("Families").Columns("UNIT_ID"))
Dim lIncomeSourceTable As New DataTable("IncomeSources") lResult.Tables.Add(lIncomeSourceTable) lResult.Tables("IncomeSources").Load(GetIpmRehabIncomeSourcesByPropertyId(ProjectId, vIncludeFormerTenants)) lResult.Relations.Add(lResult.Tables("FamilyMembers").Columns("FAMILY_MEMBER_ID"), _ lResult.Tables("IncomeSources").Columns("FAMILY_MEMBER_ID"))
End Function
The four "GetIpmRehab..." functions each return a SqlDataReader containing all the records related to any of the members of the top-level (lUnitTable) table.
In looking deeper, this example will not work for my. The data in my child table requires 2 parameters that come from the parent row.
I tried all sorts of trick, but no luck.
I tried binding the child row like so:protected void UltraWebGrid1_InitializeRow(object sender, EventArgs e) { UltraGridBand ugb = new UltraGridBand(); UltraGridColumn ugc = new UltraGridColumn("Child_Id", "", ColumnType.Custom, null); ugc.Width = new Unit("400 px"); ugb.Columns.Add(ugc); UltraWebGrid1.Bands.Add(ugb);
This made it possible for the Expand plus sign to show but the child row disappears after 2 seconds.
I deally I would like to display data in a FormView in the child row rather than in grid format.
Any help will be appreciated.
There seems to be a misunderstanding on the Band concept.
A band would denote level of data, so Band 0 would be "Owners" data, Band 1 would be "Owned Things" data. You wouldn't make a new band for each row being created in the child level.
If you are going to bind to Hierarchial Data, the ViewType of the WebGrid needs to be set to a setting that will allow for hierarchial data. Then, since you are using a DataTable (and I assume that the Parent table is also a DataTable), create a DataSet object and set the Relation in there to align the Parent and Child data
Hierarchial Data Sample Click on the C# code tab and you can naviagate to see the code behind.
The child bands are not templatable to show other controls, so you will have the WebGrid's rendering for child rows.
Hi Darrell,
I use a WHDG in my application. I am using a WHDS to bind the data. I don't want all the columns fetched in views to be displayed as some of them are used for my reference. I couldn't customize the columns AutoGenreated by the the WHDG. Is there a a way to do this?
As an alternative, I used the RowIslandsPopulating methode to bind a ContainerGrid as the child grid. And I managed to show only the necessary columns. But the problem with this is I am not able to edit the data in cells. Is it possible to make ContainerGrid editable?
I highly doubt you are going to be able to switch the child grid to a different control, in fact, I would say you aren't going to be able to do it. The WebGrid just doesn't support what you are trying to do (placing a FormView as the child band display object).
Does your DataSet object have the proper relation set up in it?
Ed,
Thanks for your response.
I agree that in a GridView this can be done fairly easily but I suspect that it can be done with the UltraWebGrid as well if we could wire into the events of the UWG.
I would assume if I could tie into the row created event of the UWG and create a FormView, load it with data in code and bind it to the child of the Row. The problem here I am having is how to tie it into the child of the Row, do I do a band?
I hope someone who has done this with UWG can respond.
Thanks for reading.
I don't think you can do what you want to do. If I understand you, each record in band 0 has a different table from which it needs to draw records for a sub-band. This is pretty straight-forward in a GridView, because each parent record can have an independent sub-GridView that is only related to that particular parent. In an WebGrid, bands are related globally. So if you can't put all your data into a parent-child dataset, I don't think you're going to pull it off in a WebGrid.
Then again, perhaps someone cleverer than I can suggest...