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