次の方法で共有


方法 : ListObject コントロールに新規行が追加された場合にデータを検証する

更新 : 2008 年 7 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

ドキュメント レベルのプロジェクト

  • Excel 2007

  • Excel 2003

アプリケーション レベルのプロジェクト

  • Excel 2007

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

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

エラーが発生する場合は、追加のデータを提供してエラーを訂正するコードを記述できます。詳細については、「方法 : ListObject コントロールに新規行が追加された場合にエラーを処理する」を参照してください。

データの検証

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

ms178773.alert_note(ja-jp,VS.90).gifメモ :

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

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

  1. ID と DataTable に使用する変数をクラス レベルで作成します。

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

    employeeTable = New System.Data.DataTable("Employees")
    
    Dim column As System.Data.DataColumn = _
        employeeTable.Columns.Add("Id", GetType(Int32))
    column.AllowDBNull = False
    
    employeeTable.Columns.Add("FirstName", GetType(String))
    employeeTable.Columns.Add("LastName", GetType(String))
    employeeTable.Columns.Add("Age", GetType(Int32))
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", 56)
    employeeTable.Rows.Add(id, "Robert", "Brown", 44)
    id += 1
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age")
    
    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 Sub list1_BeforeAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs) _
        Handles list1.BeforeAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If Not row("Age") Is Nothing And Not row("Age") Is Convert.DBNull Then
    
            Dim ageEntered As Integer = CType(row("Age"), Int32)
    
            If ageEntered < 21 Or ageEntered > 65 Then
                System.Windows.Forms.MessageBox.Show _
                    ("Age must be between 21 and 65. The row cannot be added.")
                e.Cancel = True
                Return
            End If
    
            row("ID") = id
            id += 1
    
        Else
            System.Windows.Forms.MessageBox.Show("You must enter an age.")
            e.Cancel = True
        End If
    End Sub
    
    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;
        }
    }
    

コードのコンパイル方法

このコード例では、list1 という ListObject がワークシートに既にあり、そこにこのコードが表示されると仮定しています。

参照

処理手順

方法 : データに ListObject 列を割り当てる

方法 : ListObject コントロールに新規行が追加された場合にエラーを処理する

概念

アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張

Excel のアプリケーション レベルのアドインの開発

実行時の Office ドキュメントへのコントロールの追加

ListObject コントロール

ListObject 列と行順序の永続性について

その他の技術情報

Office ドキュメントのコントロール

Excel のホスト コントロール

変更履歴

日付

履歴

理由

2008 年 7 月

アプリケーション レベルのアドインで使用できる例を変更

SP1 機能変更