private void CreateNestedPanel(GridPanel panel, GridRow row, DataRelation dr, StringBuilder sb) { DataTable ct = dr.ChildTable; bool autogen = true; ProcessChildRelations crProcess = _Panel.ProcessChildRelations; if (_Panel.SuperGrid.DoDataBindingStartEvent( _Panel, row, ct.TableName, ref autogen, ref crProcess) == false) { sb.Length = 0; for (int i=0; i<dr.ParentColumns.Length; i++) { DataColumn col = dr.ParentColumns[i]; GridColumn gc = FindGridColumn(panel, col.ColumnName); if (gc != null) { if (sb.Length > 0) sb.Append(" AND "); sb.Append("[" + dr.ChildColumns[i] + "]="); sb.Append("'" + row.Cells[gc.ColumnIndex].Value + "'"); } } string t = sb.ToString(); DataView view = new DataView(ct, t, "", DataViewRowState.CurrentRows); if (view.Count > 0 || _Panel.ProcessChildRelations == ProcessChildRelations.Always) { GridPanel ipanel = new GridPanel(); ipanel.Name = ct.TableName; ipanel.AutoGenerateColumns = autogen; ipanel.SetDataSource(panel.DataSource); ipanel.SetDataMember(ct.TableName); ipanel.DataBinder.DataView = view; ipanel.DataBinder.BaseDataSource = ipanel.DataSource; ipanel.DataBinder.BaseDataMember = ipanel.DataMember; row.Rows.Add(ipanel); ipanel.DataBinder.AddDataTable(ct, autogen, crProcess); } else { view.Dispose(); } } }