交互行を維持したままフィルタリングは可能ですか?

文書番号 : 83864     文書種別 : 使用方法     登録日 : 2019/04/11     最終更新日 : 2019/04/11
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
AlternatingRowsDefaultCellStyleの設定した状態でフィルタリングを行った場合、初期表示で配色されたままの状態で行の並べ替えが行われます。
フィルタリング後も交互行のスタイルを設定したい場合、フィルタが設定されたときには交互行スタイルを解除して独自に行のスタイルを設定する必要があります。

[Visual Basic]
Imports GrapeCity.Win.MultiRow
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' データの作成
        Dim dt As New DataTable("Test")
        dt.Columns.Add("ColA", GetType(Int32))
        dt.Columns.Add("ColB", GetType(String))
        For i As Integer = 0 To 19
            dt.Rows.Add(i Mod 4, String.Format("R{0}C1", i))
        Next
        dt.AcceptChanges()

        ' MultiRowの設定
        Dim template1 As Template = Template.CreateGridTemplate(2)
        Dim hddList As New HeaderDropDownList()
        AddHandler hddList.Closed, AddressOf hddList_Closed
        hddList.CellName = "textBoxCell1"
        hddList.Items.Add(New DropDownShowAllFilterItem())
        hddList.Items.Add(New DropDownAutoFilterItem())
        DirectCast(template1.ColumnHeaders(0)(0), ColumnHeaderCell).DropDownList = hddList
        template1.Row.Cells(0).DataField = "ColA"
        template1.Row.Cells(1).DataField = "ColB"
        GcMultiRow1.Template = template1
        GcMultiRow1.AllowUserToAddRows = False
        GcMultiRow1.DataSource = dt
        GcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender
    End Sub

    Private Sub hddList_Closed(sender As Object, e As EventArgs)
        ' "(すべて表示)"以外がチェックされた場合
        Dim hddList As HeaderDropDownList = sender
        If Not hddList.Items(0).Checked Then
            ' 交互行の背景色の初期化
            GcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Empty

            ' フィルタ後に表示されている行の偶数行の背景色の設定
            Dim count As Integer = -1
            For i As Integer = 0 To GcMultiRow1.RowCount - 1
                If hddList.GcMultiRow.Rows(i).Displayed Then
                    count += 1
                    If count Mod 2 = 1 Then
                        hddList.GcMultiRow.Rows(i).BackColor = Color.Lavender
                    End If
                End If
            Next
        Else
            ' 行の背景色の初期化
            For i As Integer = 0 To GcMultiRow1.RowCount - 1
                GcMultiRow1.Rows(i).BackColor = Color.Empty
            Next

            ' 交互行の背景色の設定
            GcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender
        End If
    End Sub
End Class

[C#]
using GrapeCity.Win.MultiRow;
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace sample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // データの作成
            DataTable dt = new DataTable("test");
            dt.Columns.Add("ColA", typeof(Int32));
            dt.Columns.Add("ColB", typeof(String));
            for(int i = 0; i < 20; i++)
            {
                dt.Rows.Add(i % 4, String.Format("R{0}C1", i));
            }
            dt.AcceptChanges();

            // MultiRowの設定
            Template template1 = Template.CreateGridTemplate(2);
            HeaderDropDownList hddList = new HeaderDropDownList();
            hddList.Closed += hddList_Closed;
            hddList.CellName = "textBoxCell1";
            hddList.Items.Add(new DropDownShowAllFilterItem());
            hddList.Items.Add(new DropDownAutoFilterItem());
            (template1.ColumnHeaders[0][0] as ColumnHeaderCell).DropDownList = hddList;
            template1.Row.Cells[0].DataField = "ColA";
            template1.Row.Cells[1].DataField = "ColB";
            gcMultiRow1.Template = template1;
            gcMultiRow1.AllowUserToAddRows = false;
            gcMultiRow1.DataSource = dt;
            gcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender;
        }

        private void hddList_Closed(Object sender, EventArgs e)
        {
            HeaderDropDownList hddList = (HeaderDropDownList)sender;
            if (!hddList.Items[0].Checked)
            {
                // 交互行の背景色の初期化
                gcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Empty;
                // フィルタ後に表示されている行の偶数行の背景色の設定
                int count = -1;
                for(int i = 0; i < gcMultiRow1.RowCount; i++)
                {
                    if (hddList.GcMultiRow.Rows[i].Displayed)
                    {
                        count += 1;
                        if ((count % 2) == 1)
                        {
                            hddList.GcMultiRow.Rows[i].BackColor = Color.Lavender;
                        }
                    }
                }
            }
            else
            {
                // 行の背景色の初期化
                for(int i = 0; i < gcMultiRow1.RowCount; i++)
                {
                    gcMultiRow1.Rows[i].BackColor = Color.Empty;
                }

                // 交互行の背景色の設定
                gcMultiRow1.AlternatingRowsDefaultCellStyle.BackColor = Color.Lavender;
            }
        }
    }
}