How to change the dropdown list of the child table with respect to the value of the parent record in WinForms GridGroupingControl?
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.
//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";
}
}
}'Hook the QueryCellStyleInfo event in Form_Load
AddHandler Me.gridGroupingControl1.QueryCellStyleInfo, AddressOf gridGroupingControl1_QueryCellStyleInfo
Private Sub gridGroupingControl1_QueryCellStyleInfo(ByVal sender As Object, ByVal e As GridTableCellStyleInfoEventArgs)
'ChildTable has a 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()
'Change the DataSource for the ComboBox based on the parent value
If o IsNot 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 SubThe 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: