MESCIUS SPREAD for ASP.NET 10.0J サンプルコード集
フィルタ条件を満たした行のインデックスを取得する

SheetViewクラスのRowFilterプロパティで行フィルタを参照し、GetIntersectedFilteredInRowsメソッドで条件を満たした行のインデックスを配列で取得します。

実行例:

コンソール出力(デバッグメッセージ):

条件に合致する行(インデックス):1
条件に合致する行(インデックス):2
protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack) return;

    SetTestData(FpSpread1.Sheets[0]);
    //列ヘッダ1行目を列見出し、2行目をフィルタに設定します
    FpSpread1.ColumnHeader.RowCount = 2;
    FpSpread1.ColumnHeader.AutoTextIndex = 0;
    FpSpread1.ColumnHeader.AutoFilterIndex = 1;
    //スタイルフィルタを設定します
    NamedStyle inStyle = new NamedStyle() { ForeColor = System.Drawing.Color.Blue };
    NamedStyle outStyle = new NamedStyle() { ForeColor = System.Drawing.Color.LightGray };
    StyleRowFilter sfilter = new StyleRowFilter(FpSpread1.Sheets[0], inStyle, outStyle);
    FpSpread1.Sheets[0].RowFilter = sfilter;
    FpSpread1.Sheets[0].RowFilter.AddColumn(0);
}

protected void Button1_Click(object sender, EventArgs e)
{
    int[] rowIndexes = FpSpread1.Sheets[0].RowFilter.GetIntersectedFilteredInRows();
    if (rowIndexes == null)
    {
        System.Diagnostics.Debug.WriteLine(string.Format("フィルタされた行はありません"));
        return;
    }
    for (int i = 0; i < rowIndexes.Length; i++)
    {
        System.Diagnostics.Debug.WriteLine(string.Format("条件に合致する行(インデックス):{0}", rowIndexes[i]));
    }
}
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsPostBack Then Return

    SetTestData(FpSpread1.Sheets(0))
    '列ヘッダ1行目を列見出し、2行目をフィルタに設定します
    FpSpread1.ColumnHeader.RowCount = 2
    FpSpread1.ColumnHeader.AutoTextIndex = 0
    FpSpread1.ColumnHeader.AutoFilterIndex = 1

    'スタイルフィルタを設定します
    Dim inStyle As New NamedStyle() With {.ForeColor = System.Drawing.Color.Blue}
    Dim outStyle As New NamedStyle() With {.ForeColor = System.Drawing.Color.LightGray}
    Dim sfilter As New StyleRowFilter(FpSpread1.Sheets(0), inStyle, outStyle)
    FpSpread1.Sheets(0).RowFilter = sfilter
    FpSpread1.Sheets(0).RowFilter.AddColumn(0)
End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim rowIndexes As Integer() = FpSpread1.Sheets(0).RowFilter.GetIntersectedFilteredInRows()
    If rowIndexes Is Nothing Then
        System.Diagnostics.Debug.WriteLine(String.Format("フィルタされた行はありません"))
        Return
    End If
    For i As Integer = 0 To rowIndexes.Length - 1
        System.Diagnostics.Debug.WriteLine(String.Format("条件に合致する行(インデックス):{0}", rowIndexes(i)))
    Next
End Sub

この例では、テストデータの生成に以下のメソッドを使用しています。

public void SetTestData(SheetView sheet)
{
    sheet.RowCount = 10;
    string tab = "\t", ent="\r\n";
    string data = "2015/12/1" + tab + "ZZZ" + tab + "1000" + ent
                     + "2016/3/31" + tab + "YYY" + tab + "2000" + ent
                     + "2016/3/31" + tab + "XXX" + tab + "3000" + ent;
    sheet.SetClip(0, 0, 3, 3, data);
    DateTimeCellType dateCell = new DateTimeCellType() { FormatString = "yyyy-M-d" };
    sheet.Columns[0].CellType = dateCell;
}
Public Sub SetTestData(sheet As SheetView)
    sheet.RowCount = 10
    Dim tab As String = vbTab, ent As String = vbNewLine
    Dim data As String = "2015/12/1" + tab + "ZZZ" + tab + "1000" + ent _
                                + "2016/3/31" + tab + "YYY" + tab + "2000" + ent _
                                + "2016/3/31" + tab + "XXX" + tab + "3000" + ent
    sheet.SetClip(0, 0, 3, 3, data)
    Dim dateCell As New DateTimeCellType() With {.FormatString = "yyyy-M-d"}
    sheet.Columns(0).CellType = dateCell
End Sub

 

 


© MESCIUS inc. All rights reserved.