PowerTools SPREAD for ASP.NET 8.0J > 開発者の手引き > データ連結 > 階層表示 > 行の展開の処理 |
データが階層表示されているとき、子階層を保持する行ヘッダに「+」「-」と展開状況を示すアイコンが表示されます。ユーザーがこのアイコンを操作することで行を展開または、折りたたむことができますが、ユーザーに特定の行の展開を許可するかどうかを設定することが可能です。アイコン画像を変更することも可能です。
また、コードから行の展開や折りたたみを行うことも可能です。特定の行のほか、一度のメソッドの呼び出しですべての行を展開、または折りたたむことができます。ループ処理を使うことなく、すべての子階層に対する処理が可能になります。
ユーザーに特定の行の展開を許可するかどうかは、SheetView クラスのSetRowExpandable メソッドで設定します。また、特定の行の展開が許可されているかどうかは、GetRowExpandable メソッドを使用して取得できます。指定の行が展開されているかどうかは、IsRowExpanded メソッドで確認できます。
特定の行を展開および折りたたむには、SheetView クラスのExpandRow メソッドを使用します。第1引数には、対象となる行インデックスと、第2引数には展開か折りたたみかを示すbool値を設定します。展開する場合はtrue、折りたたむ場合はfalseです。すべての行を展開するには、ExpandAll メソッドを使用します。展開する場合は引数にtrueを、折りたたむ場合はfalseを設定します。
また、クライアント側では、ExpandRow メソッドを使用して指定の行の展開および折りたたみを行うことができます。
アイコンを任意の画像に変更するには、FpSpread クラスのSetImage メソッドを使用します。第1引数には、SpreadImages 列挙体の以下のいずれかの値を指定します。
次のサンプルコードは、先頭行の展開を禁止します。また、Button1のクリックですべての行を展開し、Button2のクリックですべての行を折りたたみます。
protected void Page_Load(object sender, System.EventArgs e) { if (IsPostBack) return; // リレーショナルデータを作成します。 DataSet ds = new DataSet(); DataTable table1 = new DataTable("Table1"); table1.Columns.Add("区分ID", Type.GetType("System.Int32")); table1.Columns.Add("製品区分", Type.GetType("System.String")); table1.Rows.Add(new object[] { 1, "清涼飲料" }); table1.Rows.Add(new object[] { 2, "ビール" }); table1.Rows.Add(new object[] { 3, "焼酎" }); ds.Tables.Add(table1); DataTable table2 = new DataTable("Table2"); table2.Columns.Add("ID", Type.GetType("System.Int32")); table2.Columns.Add("製品名",Type.GetType("System.String")); table2.Columns.Add("価格", Type.GetType("System.String")); table2.Rows.Add(new object[] { 1, "いよかんドリンク", 100 }); table2.Rows.Add(new object[] { 1, "マンゴードリンク", 100 }); table2.Rows.Add(new object[] { 1, "ぶどうジュース", 200 }); table2.Rows.Add(new object[] { 2, "激からビール", 300 }); table2.Rows.Add(new object[] { 3, "麦焼酎 ちこちこ", 1000 }); ds.Tables.Add(table2); // リレーションを作成します。 ds.Relations.Add(table1.Columns["区分ID"], table2.Columns["ID"]); // データを連結し、先頭行の展開を禁止します。 FpSpread1.DataSource = ds; FpSpread1.ActiveSheetView.SetRowExpandable(0, false); } protected void Button1_Click(object sender, EventArgs e) { // 階層をすべて展開します。 FpSpread1.ActiveSheetView.ExpandAll(true); } protected void Button2_Click(object sender, EventArgs e) { // 階層をすべて折りたたみます。 FpSpread1.ActiveSheetView.ExpandAll(false); }
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Return ' リレーショナルデータを作成します。 Dim ds As New DataSet() Dim table1 As New DataTable("Table1") table1.Columns.Add("区分ID", Type.GetType("System.Int32")) table1.Columns.Add("製品区分", Type.GetType("System.String")) table1.Rows.Add(New Object() { 1, "清涼飲料" }) table1.Rows.Add(New Object() { 2, "ビール" }) table1.Rows.Add(New Object() { 3, "焼酎" }) ds.Tables.Add(table1) Dim table2 As New DataTable("Table2") table2.Columns.Add("ID", Type.GetType("System.Int32")) table2.Columns.Add("製品名",Type.GetType("System.String")) table2.Columns.Add("価格", Type.GetType("System.String")) table2.Rows.Add(New Object() { 1, "いよかんドリンク", 100 }) table2.Rows.Add(New Object() { 1, "マンゴードリンク", 100 }) table2.Rows.Add(New Object() { 1, "ぶどうジュース", 200 }) table2.Rows.Add(New Object() { 2, "激からビール", 300 }) table2.Rows.Add(New Object() { 3, "麦焼酎 ちこちこ", 1000 }) ds.Tables.Add(table2) ' リレーションを作成します。 ds.Relations.Add(table1.Columns("区分ID"), table2.Columns("ID")) ' データを連結し、先頭行の展開を禁止します。 FpSpread1.DataSource = ds FpSpread1.ActiveSheetView.SetRowExpandable(0, False) End Sub Protected Sub Button1_Click(sender As Object, e As EventArgs) ' 階層をすべて展開します。 FpSpread1.ActiveSheetView.ExpandAll(True) End Sub Protected Sub Button2_Click(sender As Object, e As EventArgs) ' 階層をすべて折りたたみます。 FpSpread1.ActiveSheetView.ExpandAll(False) End Sub