MESCIUS SPREAD for Windows Forms 17.0J
テーブルのフィルタの自動更新

SPREADでは、IAutoFilterAutoUpdateプロパティを使用して、セルの編集や接続されたデータソースの変更後にテーブルフィルタを自動的に更新します。既定では、このプロパティはfalseに設定されています。

AutoUpdate プロパティは、新しい自動フィルターが作成されるときに、最初に IWorksheet インターフェイスの AutoUpdateFilter プロパティから値を取得します。

  • IWorkSheet.AutoUpdateFilterプロパティがtrueに設定されている場合、自動フィルターが作成された後、テーブルの値が変更されると自動的に更新されます。
  • IWorksheet.AutoUpdateFilterプロパティがfalseに設定されている場合、自動フィルターが作成された後、テーブルの値が変更されても自動的には更新されません。

その後、AutoFilterの自動更新は、IAutoFilterインターフェースのAutoUpdateプロパティに完全に依存し、AutoUpdateFilterには依存しません。

コードを使用してテーブルの値を変更したら、IAutoFilter.ApplyFilterメソッドを呼び出す必要があります。

以下の例では、実行時のAutoUpdateプロパティの動作について説明しています。

  1. テーブルを作成し、データソースを連結します。

  2. 列Aのフィルターボタンをクリックします。
  3. リストから「John Doe」を除外し、「OK」をクリックする。

  4. 実行時に列Aの任意のセルに「John Doe」と入力します。

    結果:編集を停止すると、その行はフィルタリングされます。

    セルの値を手動で編集するか、F1 キーを押してバインドされたテーブルを新しいデータで更新することができます。

    結果:更新されたテーブルでは、以前に除外された値がフィルタリングされます。

  5. 「Disable_AutoUpd」ボタンをクリックして、AutoFilter.AutoUpdateを「False」に設定します。
  6. 表示された行のいずれかで、その値を「John Doe」に編集します。

    結果:値はフィルタリングされません。

次のコードは、AutoUpdateFilterプロパティが最初にAutoUpdateを制御し、その後、独立して実行する方法を示しています。

C#
コードのコピー
private ITable table;
private Button btn_disable_Autoupdate;

private void Form1_Load(object sender, EventArgs e)
{
  fpSpread1.LegacyBehaviors = FarPoint.Win.Spread.LegacyBehaviors.None;
  IWorksheet sheet = fpSpread1.AsWorkbook().ActiveSheet;
  // データテーブルを作成します。
  DataTable dt = new DataTable();
  dt.Columns.AddRange(new[]
  {
    new DataColumn("EmployeeName"),
    new DataColumn("Department"),
    new DataColumn("SalesAmount")
  });
  dt.Rows.Add("John Doe", "Marketing", 1500);
  dt.Rows.Add("Jane Smith", "Sales", 3000);
  dt.Rows.Add("Sam Brown", "IT", 2000);
  dt.Rows.Add("Lisa Ray", "Marketing", 1800);
  dt.Rows.Add("Paul White", "Sales", 3500);
  dt.AcceptChanges();
  // AutoUpdateFilterオプションを有効にします。
  sheet.AutoUpdateFilter = true;
  // テーブルを作成し、DataTable にバインドします。
  table = sheet.Range($"A1:C{dt.Rows.Count}").CreateTable(true);
  // AutoGenerateColumnプロパティを「True」に設定します。
  table.AutoGenerateColumns = true;
  table.DataSource = dt;
  
  this.KeyPreview = true;
  this.KeyDown += (s, ea) =>
  {
    if (ea.KeyCode == Keys.F1)
    {
      // データテーブルを修正します。
      dt.Clear();
      dt.Rows.Add("John Doe", "Marketing", 4000);
      dt.Rows.Add("Sara Blue", "IT", 2200);
      dt.Rows.Add("Sam Brown", "IT", 4500);
      dt.Rows.Add("Tom Black", "Sales", 3200);
    }
  };
}

private void Btn_disable_Autoupdate_Click(object sender, EventArgs e)
{
  // AutoUpdateオプションを無効にします。
  table.AutoFilter.AutoUpdate = false;
}
VB
コードのコピー
Private table As ITable
Private btn_disable_Autoupdate As Button

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  FpSpread1.LegacyBehaviors = FarPoint.Win.Spread.LegacyBehaviors.None
  Dim sheet As IWorksheet = FpSpread1.AsWorkbook().ActiveSheet
  ' データテーブルを作成します。
  Dim dt As DataTable = New DataTable()
  dt.Columns.AddRange({New DataColumn("EmployeeName"), New DataColumn("Department"), New DataColumn("SalesAmount")})
  dt.Rows.Add("John Doe", "Marketing", 1500)
  dt.Rows.Add("Jane Smith", "Sales", 3000)
  dt.Rows.Add("Sam Brown", "IT", 2000)
  dt.Rows.Add("Lisa Ray", "Marketing", 1800)
  dt.Rows.Add("Paul White", "Sales", 3500)
  dt.AcceptChanges()
  ' AutoUpdateFilterオプションを有効にします。
  sheet.AutoUpdateFilter = True
  ' テーブルを作成し、DataTable にバインドします。
  table = sheet.Range($"A1:C{dt.Rows.Count}").CreateTable(True)
  ' AutoGenerateColumnプロパティを「True」に設定します。
  table.AutoGenerateColumns = True
  table.DataSource = dt
  Me.KeyPreview = True
  AddHandler Me.KeyDown, Sub(s, ea)
    If ea.KeyCode = Keys.F1 Then
      ' データテーブルを修正します。
      dt.Clear()
      dt.Rows.Add("John Doe", "Marketing", 4000)
      dt.Rows.Add("Sara Blue", "IT", 2200)
      dt.Rows.Add("Sam Brown", "IT", 4500)
      dt.Rows.Add("Tom Black", "Sales", 3200)
    End If
  End Sub
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  ' AutoUpdateオプションを無効にします。
  table.AutoFilter.AutoUpdate = False
End Sub

制限事項

この機能は、LegacyBehaviors.Style が LegacyBehaviors 列挙から除外されている場合にのみ有効です。

 

 


© MESCIUS inc. All rights reserved.