Category / Section
How to change the dropdown list of the child table with respect to the value of the parent record in WinForms GridGroupingControl?
2 mins read
Get parent record value
The value of the parent record can be retrieved through the ParentRecord.GetValue() method when the current cell is in the nested table. The following code example gets the value from a CheckBox in the parent row (the column name is check) and changes the DataSource of the ComboBoxes in the nested tables. In the QueryCellStyleInfo event, the parent record's value is retrieved as an object (o). With the object, the DataSources of the nested tables are changed.
C#
//Hooks QueryCellStyleInfo event in the Form_Load to change the DataSource for the DropDown. this.gridGroupingControl1.QueryCellStyleInfo += gridGroupingControl1_QueryCellStyleInfo; private void gridGroupingControl1_QueryCellStyleInfo(object sender, GridTableCellStyleInfoEventArgs e) { //ChildTable had the ComboBox column named "dropCol." if(e.TableCellIdentity.Column != null && e.TableCellIdentity.Column.Name == "dropCol" && e.TableCellIdentity.DisplayElement is GridRecordRow) { object o = e.TableCellIdentity.DisplayElement.ParentChildTable.ParentNestedTable.ParentRecord.GetValue("check"); this.gridGroupingControl1.TableModel.ResetVolatileData(); //Changes the DataSource for the ComboBox by using the Parent value. if(o != System.DBNull.Value && o != null && o.ToString()=="True" ) { e.Style.DataSource = colors; e.Style.CellType = "ComboBox"; } else { e.Style.DataSource = shapes; e.Style.CellType = "ComboBox"; } } }
VB
'Hooks QueryCellStyleInfo event in the Form_Load to change the DataSource for the DropDown. Private Me.gridGroupingControl1.QueryCellStyleInfo += AddressOf gridGroupingControl1_QueryCellStyleInfo Private Sub gridGroupingControl1_QueryCellStyleInfo(ByVal sender As Object, ByVal e As GridTableCellStyleInfoEventArgs) 'ChildTable had the ComboBox column named "dropCol." If e.TableCellIdentity.Column IsNot Nothing AndAlso e.TableCellIdentity.Column.Name = "dropCol" AndAlso TypeOf e.TableCellIdentity.DisplayElement Is GridRecordRow Then Dim o As Object = e.TableCellIdentity.DisplayElement.ParentChildTable.ParentNestedTable.ParentRecord.GetValue("check") Me.gridGroupingControl1.TableModel.ResetVolatileData() 'Changes the DataSource for the ComboBox by using the Parent value. If o IsNot System.DBNull.Value AndAlso o IsNot Nothing AndAlso o.ToString()="True" Then e.Style.DataSource = colors e.Style.CellType = "ComboBox" Else e.Style.DataSource = shapes e.Style.CellType = "ComboBox" End If End If End Sub
The following screenshots show the ComboBox DataSource changed when the parent field is checked or unchecked.
Figure 1: ComboBox when the Parent field is “checked”
Figure 2: ComboBox when the parent field is “unchecked”
Samples: