I am trying to use the self-referencing hierarchy functionality of the grid but can't seem to get it to work properly. I even tried copying the code directly from the tutorial specified
here verbatim into a new page and I continually get the same error: "No property or field 'ParentID' exists in type 'DataRowView'."
My application has the following grid definition:
|
<telerik:RadGrid ID="RadGrid2" runat="server" Skin="" Width= "97%" OnNeedDataSource= "RadGrid2_NeedDataSource" GridLines="None" ShowHeader="False"> |
|
<MasterTableView HierarchyDefaultExpanded="True" HierarchyLoadMode="Client" DataKeyNames= "NETT_ID,NETT_IS_ID" Width="100%" AutoGenerateColumns="False"> |
|
<SelfHierarchySettings ParentKeyName="NETT_IS_ID" KeyName="NETT_ID" MaximumDepth="0" /> |
|
<Columns> |
|
<telerik:GridBoundColumn HeaderText="NETT_ID" DataField="NETT_ID" /> |
|
<telerik:GridBoundColumn HeaderText="NETT_IS_ID" DataField="NETT_IS_ID" /> |
|
<telerik:GridBoundColumn HeaderText="Intermediate Stock" DataField="NETT_PRODUCT" /> |
|
</Columns> |
|
</MasterTableView> |
|
</telerik:RadGrid> |
When I run it against my data source, the grid binds great and even has the hierarchy as I would expect with one exception - ALL records are displayed as if they are parent records in addition to the one record that should be a parent record (which has all records again as children). I need to get rid of all the "top elements" with the exception of the one that is really supposed to be the parent. In the future multiple top-level parent elements will exist (all with a NETT_IS_ID value of 0), but currently only one does.
I tried using FilterExpressions, but even when I use the sample code provided from the Knowledge Base, it doesn't run. It just tells me the column NETT_IS_ID doesn't exist in the dataview, even though I can bind to it directly and it does in fact exist.
In case it helps, here is my code-behind:
|
protected void Page_Load(object sender, EventArgs e) |
|
{ |
|
site mstr = (site)this.Master; |
|
mstr.PageHeader = "Intermediate Stock"; |
|
|
|
this.PreRenderComplete += new EventHandler(Page_PreRenderComplete); |
|
//this.BindData(); |
|
} |
|
|
|
DataTable BindData() |
|
{ |
|
|
|
DataSet ds = new DataSet(); |
|
|
|
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["IntermediateStock"].ConnectionString)) |
|
{ |
|
|
|
using (OracleCommand cm = new OracleCommand()) |
|
{ |
|
|
|
cm.Connection = conn; |
|
cm.CommandText = "IS_NETT.GET_PRODUCT_TREE"; |
|
cm.CommandType = CommandType.StoredProcedure; |
|
|
|
OracleParameter param = new OracleParameter(); |
|
param.Direction = ParameterDirection.Output; |
|
param.ParameterName = "IO_CURSOR"; |
|
param.OracleType = OracleType.Cursor; |
|
|
|
cm.Parameters.Add(param); |
|
|
|
using (OracleDataAdapter da = new OracleDataAdapter(cm)) |
|
{ |
|
//da.TableMappings.Add("Table", "ISResults"); |
|
da.Fill(ds, "Table"); |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
DataColumn[] keys = new DataColumn[1]; |
|
keys[0] = ds.Tables[0].Columns["NETT_ID"]; |
|
|
|
ds.Tables[0].PrimaryKey = keys; |
|
|
|
return ds.Tables[0]; |
|
|
|
} |
|
|
|
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) |
|
{ |
|
this.RadGrid1.DataSource = this.BindData(); |
|
} |
|
|
|
protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) |
|
{ |
|
this.RadGrid2.DataSource = this.BindData(); |
|
} |
|
|
|
public void Page_PreRenderComplete(object sender, EventArgs e) |
|
{ |
|
HideExpandColumnRecursive(RadGrid1.MasterTableView); |
|
HideExpandColumnRecursive(RadGrid2.MasterTableView); |
|
} |
|
public void HideExpandColumnRecursive(GridTableView tableView) |
|
{ |
|
GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView); |
|
foreach (GridNestedViewItem nestedViewItem in nestedViewItems) |
|
{ |
|
foreach (GridTableView nestedView in nestedViewItem.NestedTableViews) |
|
{ |
|
if (nestedView.Items.Count == 0) |
|
{ |
|
TableCell cell = nestedView.ParentItem["ExpandColumn"]; |
|
cell.Controls[0].Visible = false; |
|
nestedViewItem.Visible = false; |
|
} |
|
if (nestedView.HasDetailTables) |
|
{ |
|
HideExpandColumnRecursive(nestedView); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
Any suggestions?