バージョン

xamGrid コントロールの代わりに xamDataGrid コントロールを使用してください。xamGrid は数年以内に廃止する予定のため、新しい機能の追加はありません。xamGrid のサポートおよび重要なバグ修正は廃止時まで提供されます。コードベースの xamDataGrid への移動に関する質問は、サポートまでお問い合わせください。

データ行と子バンドの自動展開

始める前に

このセクションは、データ行および xamGrid コントロールの子バンド ヘッダー行を自動展開する方法を示します。

達成すること

xamGrid コントロールでは、 IsExpanded プロパティを True に設定することによって、データ行および ChildBand ヘッダー行を自動展開することができます。このトピックでは、xamGrid コントロールの RowExpansionChanged イベントを使用して、データ行および ChildBand ヘッダー行を自動展開する方法を示します。

xamGrid Auto Expand Data Rows and Child Bands 01.png

以下の手順を実行します。

以下のコードは、xamGrid コントロールに WPF プロジェクトを設定する方法を知っていることを前提とします。

  1. 以下の名前空間宣言を追加します。

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;
  1. RowExpansionChanged イベントのイベント ハンドラーとともに、xamGrid コントロールを追加し、コントロールの ColumnLayoutHeaderVisibility プロパティを Always に設定します。

Note

注: このコードは、データ バインディング トピックで詳述されているカスタム データへのデータ バインディングを使用しています。

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);
  1. 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);
    }
}
  1. 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);
   }
}
  1. 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;
      }
   }
}
  1. アプリケーションを実行します。RowExpansionChanged イベントが発生すると必ず、xamGrid コントロールのすべての子行および ChildBand が自動展開します。