作成日: 2021/02/05 最終更新日: 2021/02/05
文書種別
使用方法
詳細
FlexGridのフィルタリングは、フィルター条件に該当しない行のVisibleプロパティをFalseに設定することで実現しています。そのため、フィルタリング前に非表示にしていた行でも、フィルター条件に該当すると表示されることになります。
この動作を避け、フィルタ適用後も非表示状態を維持するには、フィルタ適用前の行の表示/非表示状態を保存し、フィルタ適用後に、元々非表示だった行を強制的に非表示にする方法が考えられます。
◎サンプルコード(VB)
この動作を避け、フィルタ適用後も非表示状態を維持するには、フィルタ適用前の行の表示/非表示状態を保存し、フィルタ適用後に、元々非表示だった行を強制的に非表示にする方法が考えられます。
◎サンプルコード(VB)
Public Class Form1
Dim rowIsVisible() As Boolean
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Integer
' データの設定
For i = 1 To C1FlexGrid1.Rows.Count - 1
C1FlexGrid1(i, 0) = i '行番号
C1FlexGrid1(i, 1) = (i Mod 3)
C1FlexGrid1(i, 2) = (i Mod 5)
Next
' フィルタの設定
C1FlexGrid1.AllowFiltering = True
For i = 1 To C1FlexGrid1.Cols.Count - 1
C1FlexGrid1.Cols(i).AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.Default
Next
' 非表示行の設定
C1FlexGrid1.Rows(1).Visible = False
' 行の表示/非表示状態の保存
rowIsVisible = New Boolean(C1FlexGrid1.Rows.Count) {}
For i = C1FlexGrid1.Rows.Fixed To C1FlexGrid1.Rows.Count - 1
rowIsVisible(i) = C1FlexGrid1.Rows(i).Visible
Next
End Sub
Private Sub C1FlexGrid1_BeforeFilter(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles C1FlexGrid1.BeforeFilter
If (Not (rowIsVisible) Is Nothing) Then
' 描画の一時停止
C1FlexGrid1.BeginUpdate()
End If
End Sub
Private Sub C1FlexGrid1_AfterFilter(sender As Object, e As EventArgs) Handles C1FlexGrid1.AfterFilter
Dim i
If rowIsVisible IsNot Nothing Then
' 元の非表示行を、強制的に非表示に設定
For i = C1FlexGrid1.Rows.Fixed To C1FlexGrid1.Rows.Count - 1
If rowIsVisible(i) = False Then
C1FlexGrid1.Rows(i).Visible = False
End If
Next
' 描画の再開
C1FlexGrid1.EndUpdate()
End If
End Sub
End Class
◎サンプルコード(C#) public partial class Form1 : Form
{
bool[] rowIsVisible;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// データの設定
for (var i = 1; i < c1FlexGrid1.Rows.Count; i++)
{
c1FlexGrid1[i, 0] = i; //行番号
c1FlexGrid1[i, 1] = i % 3;
c1FlexGrid1[i, 2] = i % 5;
}
// フィルタの設定
c1FlexGrid1.AllowFiltering = true;
for (var i = 1; i < c1FlexGrid1.Cols.Count; i++)
{
c1FlexGrid1.Cols[i].AllowFiltering = C1.Win.C1FlexGrid.AllowFiltering.Default;
}
// 非表示行の設定
c1FlexGrid1.Rows[1].Visible = false;
// 行の表示/非表示状態の保存
rowIsVisible = new bool[c1FlexGrid1.Rows.Count];
for (var i = c1FlexGrid1.Rows.Fixed; i < c1FlexGrid1.Rows.Count; i++)
{
rowIsVisible[i] = c1FlexGrid1.Rows[i].Visible;
}
}
// フィルタ処理のカスタマイズ
private void c1FlexGrid1_BeforeFilter(object sender, CancelEventArgs e)
{
if (rowIsVisible != null)
{
// 描画の一時停止
c1FlexGrid1.BeginUpdate();
}
}
private void c1FlexGrid1_AfterFilter(object sender, EventArgs e)
{
if (rowIsVisible != null)
{
// 元の非表示行を、強制的に非表示に設定
for (var i = c1FlexGrid1.Rows.Fixed; i < c1FlexGrid1.Rows.Count; i++)
{
if (!rowIsVisible[i])
{
c1FlexGrid1.Rows[i].Visible = false;
}
}
// 描画の再開
c1FlexGrid1.EndUpdate();
}
}
}
旧文書番号
86391