MESCIUS SPREAD for Windows Forms 17.0J > 開発者ガイド > テーブル > テーブルのフィルタの自動更新 |
SPREADでは、IAutoFilterのAutoUpdateプロパティを使用して、セルの編集や接続されたデータソースの変更後にテーブルフィルタを自動的に更新します。既定では、このプロパティはfalseに設定されています。
AutoUpdate プロパティは、新しい自動フィルターが作成されるときに、最初に IWorksheet インターフェイスの AutoUpdateFilter プロパティから値を取得します。
![]() |
|
その後、AutoFilterの自動更新は、IAutoFilterインターフェースのAutoUpdateプロパティに完全に依存し、AutoUpdateFilterには依存しません。
![]() |
コードを使用してテーブルの値を変更したら、IAutoFilter.ApplyFilterメソッドを呼び出す必要があります。 |
以下の例では、実行時のAutoUpdateプロパティの動作について説明しています。
結果:編集を停止すると、その行はフィルタリングされます。
![]() |
セルの値を手動で編集するか、F1 キーを押してバインドされたテーブルを新しいデータで更新することができます。 結果:更新されたテーブルでは、以前に除外された値がフィルタリングされます。 |
結果:値はフィルタリングされません。
次のコードは、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 列挙から除外されている場合にのみ有効です。