xamGrid コントロールの代わりに xamDataGrid コントロールを使用してください。xamGrid は数年以内に廃止する予定のため、新しい機能の追加はありません。xamGrid のサポートおよび重要なバグ修正は廃止時まで提供されます。コードベースの xamDataGrid への移動に関する質問は、サポートまでお問い合わせください。
このセクションは、データ行および xamGrid コントロールの子バンド ヘッダー行を自動展開する方法を示します。
xamGrid コントロールでは、 IsExpanded プロパティを True に設定することによって、データ行および ChildBand ヘッダー行を自動展開することができます。このトピックでは、xamGrid コントロールの RowExpansionChanged イベントを使用して、データ行および ChildBand ヘッダー行を自動展開する方法を示します。
以下のコードは、xamGrid コントロールに WPF プロジェクトを設定する方法を知っていることを前提とします。
以下の名前空間宣言を追加します。
XAML の場合:
xmlns:ig="http://schemas.infragistics.com/xaml"
Visual Basic の場合:
Imports Infragistics.Controls.Grids Imports Infragistics.Controls.Grids.Primitives
C# の場合:
using Infragistics.Controls.Grids; using Infragistics.Controls.Grids.Primitives;
RowExpansionChanged イベントのイベント ハンドラーとともに、xamGrid コントロールを追加し、コントロールの ColumnLayoutHeaderVisibility プロパティを Always に設定します。
XAML の場合:
<ig:XamGrid x:Name="xamGrid" ColumnLayoutHeaderVisibility="Always" RowExpansionChanged="xamGrid_RowExpansionChanged" ItemsSource="{Binding Source={StaticResource DataUtil}, Path=CategoriesAndProducts}" />
Visual Basic の場合:
Private xamGrid As XamGrid ' ... InitializeComponent() ' ... xamGrid = New XamGrid() xamGrid.ColumnLayoutHeaderVisibility = ColumnLayoutHeaderVisibility.Always xamGrid.ItemsSource = DataUtil.CategoriesAndProducts AddHandler xamGrid.RowExpansionChanged, AddressOf xamGrid_RowExpansionChanged Me.LayoutRoot.Children.Add(xamGrid)
C# の場合:
private XamGrid xamGrid; //... InitializeComponent(); // ... xamGrid = new XamGrid(); xamGrid.ColumnLayoutHeaderVisibility = ColumnLayoutHeaderVisibility.Always; xamGrid.RowExpansionChanged += xamGrid_RowExpansionChanged; xamGrid.ItemsSource = DataUtil.CategoriesAndProducts; this.LayoutRoot.Children.Add(xamGrid);
Row オブジェクトを自動展開するために以下のメソッドを追加します。
Visual Basic の場合:
Private Sub AutoExpandAllChildRows(ByVal parentRow As Row) For Each cb As ChildBand In parentRow.ChildBands cb.IsExpanded = True If cb.HasChildren Then AutoExpandAllChildBands(cb) End If Next End Sub
C# の場合:
private void AutoExpandAllChildRows(Row parentRow) { foreach (ChildBand cb in parentRow.ChildBands) { cb.IsExpanded = true; if (cb.HasChildren) AutoExpandAllChildBands(cb); } }
ChildBand オブジェクトを自動展開するために以下のメソッドを追加します。
Visual Basic の場合:
Private Sub AutoExpandAllChildBands(ByVal parentBand As ChildBand) For Each r As Row In parentBand.Rows r.IsExpanded = True If r.HasChildren Then AutoExpandAllChildRows(r) End If Next End Sub
C# の場合:
private void AutoExpandAllChildBands(ChildBand parentBand) { foreach (Row r in parentBand.Rows) { r.IsExpanded = true; if (r.HasChildren) AutoExpandAllChildRows(r); } }
Boolean AutoExpanding フラグを追加して、xamGrid コントロールの RowExpansionChanged イベントのイベント ハンドラーを実装します。
Visual Basic の場合:
Private AutoExpanding As Boolean = False ' ... Private Sub xamGrid_RowExpansionChanged(ByVal sender As System.Object, ByVal e As RowExpansionChangedEventArgs) If Not AutoExpanding Then ' 親行が展開される場合に限り子行を展開します。 If e.Row.IsExpanded Then AutoExpanding = True If (e.Row.RowType = RowType.DataRow) Then AutoExpandAllChildRows(TryCast(e.Row, Row)) End If If (e.Row.RowType = RowType.ColumnLayoutHeaderRow) Then AutoExpandAllChildBands(TryCast(e.Row, ChildBand)) End If AutoExpanding = False End If End If End Sub
C# の場合:
private bool AutoExpanding = false; // ... private void xamGrid_RowExpansionChanged(object sender, RowExpansionChangedEventArgs e) { if (!AutoExpanding) { // 親行が展開される場合に限り子行を展開します。 if (e.Row.IsExpanded) { AutoExpanding = true; if (e.Row.RowType == RowType.DataRow) AutoExpandAllChildRows((Row)e.Row); if (e.Row.RowType == RowType.ColumnLayoutHeaderRow) AutoExpandAllChildBands((ChildBand)e.Row); AutoExpanding = false; } } }
アプリケーションを実行します。RowExpansionChanged イベントが発生すると必ず、xamGrid コントロールのすべての子行および ChildBand が自動展開します。