Share via


ListObject コントロールに新しい行が追加されたときにデータを検証する

ユーザーはデータにバインドされている ListObject コントロールに新しい行を追加できます。 変更をデータ ソースにコミットする前に、ユーザーのデータを検証できます。

適用対象: このトピックの情報は、Excel のドキュメント レベルのプロジェクトおよび VSTO アドインのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

データ検証

データにバインドされている ListObject に行が追加されるたびに、 BeforeAddDataBoundRow イベントが発生します。 このイベントを処理することで、データの検証を実行できます。 たとえば、アプリケーションでデータ ソースに 18 から 65 歳の従業員のみを追加できるようにする必要がある場合、行が追加される前に、入力された年齢がその範囲内であることを検証します。

Note

常に、クライアントだけでなく、サーバー上のユーザー入力も確認する必要があります。 詳細については、「安全なクライアント アプリケーション」を参照してください。

データ バインドされた ListObject に新規行が追加された場合にデータを検証するには

  1. クラス レベルで ID および DataTable の変数を作成します。

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. 新しい DataTable を作成し、Sheet1クラス (ドキュメントレベルのプロジェクト内) または ThisAddInクラス (VSTO アドイン プロジェクト内) の Startup イベント ハンドラーにサンプルの列とデータを追加します。

    employeeTable = new System.Data.DataTable("Employees");
    
    System.Data.DataColumn column = employeeTable.Columns.Add
        ("Id", typeof(int));
    column.AllowDBNull = false;
    
    employeeTable.Columns.Add("FirstName", typeof(string));
    employeeTable.Columns.Add("LastName", typeof(string));
    employeeTable.Columns.Add("Age", typeof(int));
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", "56");
    employeeTable.Rows.Add(id, "Robert", "Brown", "44");
    id++;
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age");
    
    list1.BeforeAddDataBoundRow +=new Microsoft.Office.Tools.Excel.
        BeforeAddDataBoundRowEventHandler(list1_BeforeAddDataBoundRow);
    
  3. list1_BeforeAddDataBoundRow イベント ハンドラーに、入力された年齢が許容範囲内であるかどうかを確認するコードを追加します。

    private void list1_BeforeAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (row["Age"] != null && row["Age"] != Convert.DBNull)
        {
            int ageEntered = (int)row["Age"];
    
            if (ageEntered < 21 || ageEntered > 65)
            {
                System.Windows.Forms.MessageBox.Show
                    ("Age must be between 21 and 65. The row cannot be added.");
                e.Cancel = true;
                return;
            }
            row["ID"] = id;
            id++;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("You must enter an age.");
            e.Cancel = true;
        }
    }
    

コードのコンパイル

このコード例では、このコードがあるワークシートに、 ListObject という名前の既存の list1 があることを前提としています。