IHierarchicalEnumerable.GetHierarchyData(Object) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回指定列舉項目的階層式資料項目。
public:
System::Web::UI::IHierarchyData ^ GetHierarchyData(System::Object ^ enumeratedItem);
public System.Web.UI.IHierarchyData GetHierarchyData (object enumeratedItem);
abstract member GetHierarchyData : obj -> System.Web.UI.IHierarchyData
Public Function GetHierarchyData (enumeratedItem As Object) As IHierarchyData
參數
- enumeratedItem
- Object
要傳回 Object 的 IHierarchyData。
傳回
IHierarchyData 執行個體,表示傳遞給 Object 方法的 GetHierarchyData(Object)。
範例
下列程式碼範例示範 ASP.NET 階層式資料繫結控制項 IHierarchyData 如何在遞迴資料系結方法中使用 物件。 列舉物件中的 IHierarchicalEnumerable 專案,並使用 方法擷取 GetHierarchyData 每個 IHierarchyData 物件。 最後, HasChildren 會檢查 屬性,以判斷是否需要遞迴。 此程式碼範例是提供給 類別之較大範例的 HierarchicalDataBoundControl 一部分。
private void RecurseDataBindInternal(TreeNode node,
IHierarchicalEnumerable enumerable, int depth) {
foreach(object item in enumerable) {
IHierarchyData data = enumerable.GetHierarchyData(item);
if (null != data) {
// Create an object that represents the bound data
// to the control.
TreeNode newNode = new TreeNode();
RootViewNode rvnode = new RootViewNode();
rvnode.Node = newNode;
rvnode.Depth = depth;
// The dataItem is not just a string, but potentially
// an XML node or some other container.
// If DataTextField is set, use it to determine which
// field to render. Otherwise, use the first field.
if (DataTextField.Length > 0) {
newNode.Text = DataBinder.GetPropertyValue
(data, DataTextField, null);
}
else {
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(data);
// Set the "default" value of the node.
newNode.Text = String.Empty;
// Set the true data-bound value of the TextBox,
// if possible.
if (props.Count >= 1) {
if (null != props[0].GetValue(data)) {
newNode.Text =
props[0].GetValue(data).ToString();
}
}
}
Nodes.Add(rvnode);
if (data.HasChildren) {
IHierarchicalEnumerable newEnumerable =
data.GetChildren();
if (newEnumerable != null) {
RecurseDataBindInternal(newNode,
newEnumerable, depth+1 );
}
}
if ( _maxDepth < depth) _maxDepth = depth;
}
}
}
Private Sub RecurseDataBindInternal(ByVal node As TreeNode, _
ByVal enumerable As IHierarchicalEnumerable, _
ByVal depth As Integer)
Dim item As Object
For Each item In enumerable
Dim data As IHierarchyData = enumerable.GetHierarchyData(item)
If Not data Is Nothing Then
' Create an object that represents the bound data
' to the control.
Dim newNode As New TreeNode()
Dim rvnode As New RootViewNode()
rvnode.Node = newNode
rvnode.Depth = depth
' The dataItem is not just a string, but potentially
' an XML node or some other container.
' If DataTextField is set, use it to determine which
' field to render. Otherwise, use the first field.
If DataTextField.Length > 0 Then
newNode.Text = DataBinder.GetPropertyValue _
(data, DataTextField, Nothing)
Else
Dim props As PropertyDescriptorCollection = _
TypeDescriptor.GetProperties(data)
' Set the "default" value of the node.
newNode.Text = String.Empty
' Set the true data-bound value of the TextBox,
' if possible.
If props.Count >= 1 Then
If Not props(0).GetValue(data) Is Nothing Then
newNode.Text = props(0).GetValue(data).ToString()
End If
End If
End If
Nodes.Add(rvnode)
If data.HasChildren Then
Dim newEnumerable As IHierarchicalEnumerable = _
data.GetChildren()
If Not (newEnumerable Is Nothing) Then
RecurseDataBindInternal(newNode, _
newEnumerable, depth + 1)
End If
End If
If MaxDepth < depth Then
MaxDepth = depth
End If
End If
Next item
End Sub
備註
一般而言,使用 IHierarchicalEnumerable 集合 IEnumerator 的 GetEnumerator 用戶端會藉由呼叫 方法來擷取物件,然後逐一查看 列舉,並在每個列舉專案上呼叫 GetHierarchyData 方法以擷取 IHierarchyData 物件。