Sometimes it is necessary to show hierarchical data inside a detail ASPxGridView row. ASPxTreeList can show hierarchical data, but it does not have the built-in capability to get a corresponding master row key value.
To get a grid master row key value, it is necessary to move up through a hierarchy of controls to find the GridViewBaseRowTemplateContainer that has the KeyValue property. This is a universal solution and it can be applied to any ASP.NET control held in a grid template.
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default" %><%@RegisterAssembly="DevExpress.Web.ASPxGridView.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxGridView"TagPrefix="dx" %><%@RegisterAssembly="DevExpress.Web.ASPxEditors.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxEditors"TagPrefix="dxe" %><%@RegisterAssembly="DevExpress.Web.ASPxTreeList.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxTreeList"TagPrefix="dx" %><!DOCTYPE htmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>Untitled Page</title></head><body><formid="form1"runat="server"><div><dx:ASPxGridViewID="ASPxGridView1"runat="server"AutoGenerateColumns="False"DataSourceID="AccessDataSource1"KeyFieldName="ID"><Templates><DetailRow><dx:ASPxTreeListID="ASPxTreeList1"runat="server"AutoGenerateColumns="False"DataSourceID="AccessDataSource1"KeyFieldName="ID"OnInit="ASPxTreeList1_Init"ParentFieldName="PARENTID"><Columns><dx:TreeListTextColumnFieldName="DEPARTMENT"VisibleIndex="0"></dx:TreeListTextColumn></Columns></dx:ASPxTreeList></DetailRow></Templates><Columns><dx:GridViewDataTextColumnFieldName="ID"ReadOnly="True"VisibleIndex="0"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumnFieldName="PARENTID"VisibleIndex="1"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumnFieldName="DEPARTMENT"VisibleIndex="2"></dx:GridViewDataTextColumn></Columns><SettingsDetailShowDetailRow="True" /></dx:ASPxGridView><asp:AccessDataSourceID="AccessDataSource1"runat="server"DataFile="~/App_Data/Departments.mdb"DeleteCommand="DELETE FROM [Departments] WHERE (([ID] = ?) OR ([ID] IS NULL AND ? IS NULL))"InsertCommand="INSERT INTO [Departments] ([ID], [PARENTID], [DEPARTMENT]) VALUES (?, ?, ?)"SelectCommand="SELECT [ID], [PARENTID], [DEPARTMENT] FROM [Departments]"UpdateCommand="UPDATE [Departments] SET [PARENTID] = ?, [DEPARTMENT] = ? WHERE (([ID] = ?) OR ([ID] IS NULL AND ? IS NULL))"><DeleteParameters><asp:ParameterName="ID"Type="Double" /></DeleteParameters><UpdateParameters><asp:ParameterName="PARENTID"Type="Double" /><asp:ParameterName="DEPARTMENT"Type="String" /><asp:ParameterName="ID"Type="Double" /></UpdateParameters><InsertParameters><asp:ParameterName="ID"Type="Double" /><asp:ParameterName="PARENTID"Type="Double" /><asp:ParameterName="DEPARTMENT"Type="String" /></InsertParameters></asp:AccessDataSource></div></form></body></html>
<%@PageLanguage="vb"AutoEventWireup="true"CodeFile="Default.aspx.vb"Inherits="_Default" %><%@RegisterAssembly="DevExpress.Web.ASPxGridView.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxGridView"TagPrefix="dx" %><%@RegisterAssembly="DevExpress.Web.ASPxEditors.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxEditors"TagPrefix="dxe" %><%@RegisterAssembly="DevExpress.Web.ASPxTreeList.v11.1, Version=11.1.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"Namespace="DevExpress.Web.ASPxTreeList"TagPrefix="dx" %><!DOCTYPE htmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>Untitled Page</title></head><body><formid="form1"runat="server"><div><dx:ASPxGridViewID="ASPxGridView1"runat="server"AutoGenerateColumns="False"DataSourceID="AccessDataSource1"KeyFieldName="ID"><Templates><DetailRow><dx:ASPxTreeListID="ASPxTreeList1"runat="server"AutoGenerateColumns="False"DataSourceID="AccessDataSource1"KeyFieldName="ID"OnInit="ASPxTreeList1_Init"ParentFieldName="PARENTID"><Columns><dx:TreeListTextColumnFieldName="DEPARTMENT"VisibleIndex="0"></dx:TreeListTextColumn></Columns></dx:ASPxTreeList></DetailRow></Templates><Columns><dx:GridViewDataTextColumnFieldName="ID"ReadOnly="True"VisibleIndex="0"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumnFieldName="PARENTID"VisibleIndex="1"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumnFieldName="DEPARTMENT"VisibleIndex="2"></dx:GridViewDataTextColumn></Columns><SettingsDetailShowDetailRow="True" /></dx:ASPxGridView><asp:AccessDataSourceID="AccessDataSource1"runat="server"DataFile="~/App_Data/Departments.mdb"DeleteCommand="DELETE FROM [Departments] WHERE (([ID] = ?) OR ([ID] IS NULL AND ? IS NULL))"InsertCommand="INSERT INTO [Departments] ([ID], [PARENTID], [DEPARTMENT]) VALUES (?, ?, ?)"SelectCommand="SELECT [ID], [PARENTID], [DEPARTMENT] FROM [Departments]"UpdateCommand="UPDATE [Departments] SET [PARENTID] = ?, [DEPARTMENT] = ? WHERE (([ID] = ?) OR ([ID] IS NULL AND ? IS NULL))"><DeleteParameters><asp:ParameterName="ID"Type="Double" /></DeleteParameters><UpdateParameters><asp:ParameterName="PARENTID"Type="Double" /><asp:ParameterName="DEPARTMENT"Type="String" /><asp:ParameterName="ID"Type="Double" /></UpdateParameters><InsertParameters><asp:ParameterName="ID"Type="Double" /><asp:ParameterName="PARENTID"Type="Double" /><asp:ParameterName="DEPARTMENT"Type="String" /></InsertParameters></asp:AccessDataSource></div></form></body></html>
ImportsMicrosoft.VisualBasicImportsSystemImportsSystem.DataImportsSystem.ConfigurationImportsSystem.WebImportsSystem.Web.SecurityImportsSystem.Web.UIImportsSystem.Web.UI.WebControlsImportsSystem.Web.UI.WebControls.WebPartsImportsSystem.Web.UI.HtmlControlsImports DevExpress.Web.ASPxGridView
ImportsDevExpress.Web.ASPxTreeListPartialPublicClass _Default
Inherits System.Web.UI.Page
ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As EventArgs)
EndSubProtectedFunction GetMasterRowKeyValue(ByVal treeList As ASPxTreeList) AsObjectDim container As GridViewBaseRowTemplateContainer = NothingDim control As Control = treeList
DoWhile control.Parent IsNotNothing
container = TryCast(control.Parent, GridViewBaseRowTemplateContainer)
If container IsNotNothingThenExitDoEndIf
control = control.Parent
LoopReturn container.KeyValue
EndFunctionProtectedSub ASPxTreeList1_Init(ByVal sender AsObject, ByVal e As EventArgs)
Dim treeList As ASPxTreeList = TryCast(sender, ASPxTreeList)
Dim keyValue AsObject = GetMasterRowKeyValue(treeList)
treeList.RootValue = keyValue
EndSubEndClass
The following code snippets (auto-collected from DevExpress Examples) contain references to the KeyValue property.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.