作成日: 2020/04/20 最終更新日: 2020/04/20
文書種別
使用方法
詳細
FlexGridのフィルタリングを有効にした場合、通常、列のフィルタアイコンをクリックするとその列のフィルタダイアログが表示されます。
しかし、列ヘッダが結合されている場合は、フィルタアイコンは表示されません。ただし、結合されたヘッダの右端をクリックすると、結合ヘッダ内の最右列に対するフィルタダイアログが表示されます。
これは内部仕様上の動作となり、結合ヘッダ内の前列のデータでフィルタリングしたい場合は、以下の方法を使用することで対処できます。
1.BeforeMouseDownイベントにて、HitTestメソッドを使用してクリックした列を判定し、イベントをキャンセルする
2.グリッドのEditFilter(Column)メソッドでフィルタを呼び出す
以下は、2列目(製品名)のヘッダ右側をクリックした場合に、1列目(製品コード)のフィルタダイアログを表示するサンプルコードです。
◎サンプルコード(VB)
しかし、列ヘッダが結合されている場合は、フィルタアイコンは表示されません。ただし、結合されたヘッダの右端をクリックすると、結合ヘッダ内の最右列に対するフィルタダイアログが表示されます。
これは内部仕様上の動作となり、結合ヘッダ内の前列のデータでフィルタリングしたい場合は、以下の方法を使用することで対処できます。
1.BeforeMouseDownイベントにて、HitTestメソッドを使用してクリックした列を判定し、イベントをキャンセルする
2.グリッドのEditFilter(Column)メソッドでフィルタを呼び出す
以下は、2列目(製品名)のヘッダ右側をクリックした場合に、1列目(製品コード)のフィルタダイアログを表示するサンプルコードです。
◎サンプルコード(VB)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' フィルタ操作の設定
C1FlexGrid1.AllowFiltering = True
' 列ヘッダの結合
C1FlexGrid1.AllowMergingFixed = C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly
C1FlexGrid1.Rows(0).AllowMerging = True
Dim Range As C1.Win.C1FlexGrid.CellRange = C1FlexGrid1.GetCellRange(0, 1, 0, 2)
Range.Data = "部品"
' データの設定
C1FlexGrid1(1, 1) = "部品コードA"
C1FlexGrid1(1, 2) = "部品名Y"
C1FlexGrid1(2, 1) = "部品コードB"
C1FlexGrid1(2, 2) = "部品名X"
End Sub
Private Sub C1FlexGrid1_BeforeMouseDown(sender As Object, e As C1.Win.C1FlexGrid.BeforeMouseDownEventArgs) Handles C1FlexGrid1.BeforeMouseDown
Dim hti As C1.Win.C1FlexGrid.HitTestInfo = C1FlexGrid1.HitTest(e.X, e.Y)
If hti.Type = C1.Win.C1FlexGrid.HitTestTypeEnum.FilterIcon And
hti.Column = 2 And Not C1FlexGrid1.Cols(2).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.None Then
' 2列目のフィルタアイコンがクリックされた場合このクリックをキャンセルし、
' 1列目のフィルタダイアログを表示する
e.Cancel = True
C1FlexGrid1.EditFilter(1)
End If
End Sub
End Class
◎サンプルコード(C#)public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// フィルタ操作の設定
c1FlexGrid1.AllowFiltering = true;
// 列ヘッダの結合
c1FlexGrid1.AllowMergingFixed = C1.Win.C1FlexGrid.AllowMergingEnum.FixedOnly;
c1FlexGrid1.Rows[0].AllowMerging = true;
C1.Win.C1FlexGrid.CellRange range = c1FlexGrid1.GetCellRange(0, 1, 0, 2);
range.Data = "部品";
// データの設定
c1FlexGrid1[1, 1] = "部品コードA";
c1FlexGrid1[1, 2] = "部品名Y";
c1FlexGrid1[2, 1] = "部品コードB";
c1FlexGrid1[2, 2] = "部品名X";
}
private void c1FlexGrid1_BeforeMouseDown(object sender, C1.Win.C1FlexGrid.BeforeMouseDownEventArgs e)
{
C1.Win.C1FlexGrid.HitTestInfo hti = c1FlexGrid1.HitTest(e.X, e.Y);
if (hti.Type == C1.Win.C1FlexGrid.HitTestTypeEnum.FilterIcon &&
hti.Column == 2 && c1FlexGrid1.Cols[2].AllowFiltering != C1.Win.C1FlexGrid.AllowFiltering.None)
{
// 2列目のフィルタアイコンがクリックされた場合このクリックをキャンセルし、
// 1列目のフィルタダイアログを表示する
e.Cancel = true;
c1FlexGrid1.EditFilter(1);
}
}
}
旧文書番号
85492