作成日: 2024/03/01 最終更新日: 2024/03/01
文書種別
使用方法
詳細
コードを用いて、複数列にフィルタ条件を設定し、フィルタリングする2種類の方法を紹介します。

(1)すべての条件を満たす行のみ表示
2つの列にフィルタ条件を設定し、これらすべての条件を同時に満たす行だけを取得するには、以下の手順を実行します。
・列のFilterプロパティを用いて、最初の列のConditionFilterを作成します。
・ConditionFilteのCondition1、Condition2プロパティを用いてフィルタ条件を設定します。
・同様の手順で、2番目の列にConditionFilterのフィルタ条件を設定します。
・C1FlexGridのApplyFiltersメソッドで、これらすべての列フィルタを適用します。
以下に、「1列目の値が6~15の間」かつ「2列目の値に"B"が含まれる」行のみをフィルタリングする例を記載します。
◎サンプルコード(VB)
(2)どれか1つを満たす行をすべて表示
2つの列にフィルタ条件を設定し、これらのうち1つを満たす行をすべて取得するには、以下の手順を実行します。
・列のFilterプロパティを用いて、最初の列のConditionFilterを作成します。
・ConditionFilteのCondition1、Condition2プロパティを用いてフィルタ条件を設定します。
・C1FlexGridのApplyFiltersメソッドで、最初の列に列フィルタを適用します。
・Visibleプロパティを用いてこの時点で表示される行の番号を取得して、作業用のリストに追加します。
・同様の手順で、2番目の列にConditionFilterのフィルタ条件で表示される行の番号をリストに追加します。
・C1FlexGridのすべての行のうち、リストに含まれる行のみのVisibleをTrueに設定します。
以下に、「1列目の値が6~15の間」または「2列目の値に"B"が含まれる」行をすべてフィルタリングする例を記載します。
※ データの設定方法は、ケース(1)のコードを参照してください。
(1)すべての条件を満たす行のみ表示
2つの列にフィルタ条件を設定し、これらすべての条件を同時に満たす行だけを取得するには、以下の手順を実行します。
・列のFilterプロパティを用いて、最初の列のConditionFilterを作成します。
・ConditionFilteのCondition1、Condition2プロパティを用いてフィルタ条件を設定します。
・同様の手順で、2番目の列にConditionFilterのフィルタ条件を設定します。
・C1FlexGridのApplyFiltersメソッドで、これらすべての列フィルタを適用します。
以下に、「1列目の値が6~15の間」かつ「2列目の値に"B"が含まれる」行のみをフィルタリングする例を記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As DataTable = New DataTable("TEST")
dt.Columns.Add("ColumnA", Type.GetType("System.Int32"))
dt.Columns.Add("ColumnB", Type.GetType("System.String"))
Dim i As Integer
For i = 0 To 19
If i < 10 Then
dt.Rows.Add(i + 1, String.Format("A{0}", i + 1))
Else
dt.Rows.Add(i + 1, String.Format("B{0}", i + 1))
End If
Next
dt.AcceptChanges()
' FlexGridの設定
C1FlexGrid1.DataSource = dt
' フィルタリングの許可
C1FlexGrid1.AllowFiltering = True
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' 1列目の条件フィルタ設定
Dim col = C1FlexGrid1.Cols("ColumnA")
col.AllowFiltering = AllowFiltering.ByCondition
Dim cf = TryCast(col.Filter, ConditionFilter)
cf.Condition1.[Operator] = ConditionOperator.GreaterThan
cf.Condition1.Parameter = 5
cf.Condition2.[Operator] = ConditionOperator.LessThan
cf.Condition2.Parameter = 16
' 2列目の条件フィルタ設定
col = C1FlexGrid1.Cols("ColumnB")
col.AllowFiltering = AllowFiltering.ByCondition
cf = TryCast(col.Filter, ConditionFilter)
cf.Condition1.[Operator] = ConditionOperator.Contains
cf.Condition1.Parameter = "B"
' 1列目&2列目のフィルタを適用
C1FlexGrid1.ApplyFilters()
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// データの作成
var dt = new DataTable("TEST");
dt.Columns.Add("ColumnA", Type.GetType("System.Int32"));
dt.Columns.Add("ColumnB", Type.GetType("System.String"));
int i;
for (i = 0; i <= 19; i++)
{
if (i < 10)
{
dt.Rows.Add(i + 1, string.Format("A{0}", i + 1));
}
else
{
dt.Rows.Add(i + 1, string.Format("B{0}", i + 1));
}
}
dt.AcceptChanges();
// FlexGridの設定
c1FlexGrid1.DataSource = dt;
// フィルタリングの許可
c1FlexGrid1.AllowFiltering = true;
}
private void Button1_Click(object sender, EventArgs e)
{
// 1列目の条件フィルタ設定
var col = c1FlexGrid1.Cols["ColumnA"];
col.AllowFiltering = AllowFiltering.ByCondition;
ConditionFilter cf = col.Filter as ConditionFilter;
cf.Condition1.Operator = ConditionOperator.GreaterThan;
cf.Condition1.Parameter = 5;
cf.Condition2.Operator = ConditionOperator.LessThan;
cf.Condition2.Parameter = 16;
// 2列目の条件フィルタ設定
col = c1FlexGrid1.Cols["ColumnB"];
col.AllowFiltering = AllowFiltering.ByCondition;
cf = col.Filter as ConditionFilter;
cf.Condition1.Operator = ConditionOperator.Contains;
cf.Condition1.Parameter = "B";
// 1列目&2列目のフィルタを適用
c1FlexGrid1.ApplyFilters();
}
}
}
(2)どれか1つを満たす行をすべて表示
2つの列にフィルタ条件を設定し、これらのうち1つを満たす行をすべて取得するには、以下の手順を実行します。
・列のFilterプロパティを用いて、最初の列のConditionFilterを作成します。
・ConditionFilteのCondition1、Condition2プロパティを用いてフィルタ条件を設定します。
・C1FlexGridのApplyFiltersメソッドで、最初の列に列フィルタを適用します。
・Visibleプロパティを用いてこの時点で表示される行の番号を取得して、作業用のリストに追加します。
・同様の手順で、2番目の列にConditionFilterのフィルタ条件で表示される行の番号をリストに追加します。
・C1FlexGridのすべての行のうち、リストに含まれる行のみのVisibleをTrueに設定します。
以下に、「1列目の値が6~15の間」または「2列目の値に"B"が含まれる」行をすべてフィルタリングする例を記載します。
※ データの設定方法は、ケース(1)のコードを参照してください。
◎サンプルコード(VB)
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'---- 1列目の値が6~15の間、または2列目の値に"B"が含まれる行をすべてフィルタリング ----
C1FlexGrid1.ClearFilter()
' 1列目の条件フィルタ設定
Dim col = C1FlexGrid1.Cols("ColumnA")
col.AllowFiltering = AllowFiltering.ByCondition
Dim cf = TryCast(col.Filter, ConditionFilter)
cf.Condition1.[Operator] = ConditionOperator.GreaterThan
cf.Condition1.Parameter = 5
cf.Condition2.[Operator] = ConditionOperator.LessThan
cf.Condition2.Parameter = 16
' 1列目のフィルタを適用
C1FlexGrid1.ApplyFilters()
' 1列目の結果をリストに保存
Dim LFilter As List(Of Integer) = New List(Of Integer)()
For i = 0 To 19
If C1FlexGrid1.Rows(i).Visible Then
LFilter.Add(i)
End If
Next
C1FlexGrid1.ClearFilter()
' 2列目の条件フィルタ設定
col = C1FlexGrid1.Cols("ColumnB")
col.AllowFiltering = AllowFiltering.ByCondition
cf = TryCast(col.Filter, ConditionFilter)
cf.Condition1.[Operator] = ConditionOperator.Contains
cf.Condition1.Parameter = "B"
' 2列目のフィルタを適用
C1FlexGrid1.ApplyFilters()
' 2列目の結果をリストに保存
For i = 0 To 19
If C1FlexGrid1.Rows(i).Visible Then
LFilter.Add(i)
End If
Next
C1FlexGrid1.ClearFilter()
' リストに含まれている行のみを表示
For i = 0 To 19
C1FlexGrid1.Rows(i).Visible = False
If LFilter.Contains(i) Then
C1FlexGrid1.Rows(i).Visible = True
End If
Next
End Sub
◎サンプルコード(C#)
private void Button2_Click(object sender, EventArgs e)
{
// ---- 1列目の値が6~15の間、または2列目の値に"B"が含まれる行をフィルタリング ----
c1FlexGrid1.ClearFilter();
// 1列目の条件フィルタ設定
var col = c1FlexGrid1.Cols["ColumnA"];
col.AllowFiltering = AllowFiltering.ByCondition;
ConditionFilter cf = col.Filter as ConditionFilter;
cf.Condition1.Operator = ConditionOperator.GreaterThan;
cf.Condition1.Parameter = 5;
cf.Condition2.Operator = ConditionOperator.LessThan;
cf.Condition2.Parameter = 16;
// 1列目のフィルタを適用
c1FlexGrid1.ApplyFilters();
// 1列目の結果をリストに保存
var LFilter = new List<int>();
for (int i = 0; i <= 19; i++)
{
if (c1FlexGrid1.Rows[i].Visible)
{
LFilter.Add(i);
}
}
c1FlexGrid1.ClearFilter();
// 2列目の条件フィルタ設定
col = c1FlexGrid1.Cols["ColumnB"];
col.AllowFiltering = AllowFiltering.ByCondition;
cf = col.Filter as ConditionFilter;
cf.Condition1.Operator = ConditionOperator.Contains;
cf.Condition1.Parameter = "B";
// 2列目のフィルタを適用
c1FlexGrid1.ApplyFilters();
// 2列目の結果をリストに保存
for (int i = 0; i <= 19; i++)
{
if (c1FlexGrid1.Rows[i].Visible)
{
LFilter.Add(i);
}
}
c1FlexGrid1.ClearFilter();
// リストに含まれている行のみを表示
for (int i = 0; i <= 19; i++)
{
c1FlexGrid1.Rows[i].Visible = false;
if (LFilter.Contains(i))
{
c1FlexGrid1.Rows[i].Visible = true;
}
}
}