方法 : ListObject コントロールに新規行が追加された場合にエラーを処理する
更新 : 2008 年 7 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 ドキュメント レベルのプロジェクト
アプリケーション レベルのプロジェクト
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
ユーザーは、データにバインドされた ListObject コントロールに新しい行を追加できます。リスト オブジェクトとデータ ソースの関係が原因でルーチン エラーが発生することがあります。たとえば、ListObject に表示する列を対応付けることができますが、NULL 値を受け付けないフィールドなど、制約のある列を省略した場合は、行が作成されるたびにエラーが発生します。ErrorAddDataBoundRow イベントのイベント ハンドラに不足している値を追加するコードを記述できます。
データ バインド行を追加したときのエラーを処理するには
ID と DataTable に使用する変数をクラス レベルで作成します。
Dim id As Integer = 0 Dim employeeTable As System.Data.DataTable
private int id = 0; private System.Data.DataTable employeeTable;
新しい 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.ErrorAddDataBoundRow += new Microsoft.Office.Tools.Excel. ErrorAddDataBoundRowEventHandler(list1_ErrorAddDataBoundRow);
ErrorAddDataBoundRow イベントのイベント ハンドラで、インクリメントした次の ID 番号を ID フィールドに追加し、再び行を追加します。
Private Sub list1_ErrorAddDataBoundRow(ByVal sender As Object, ByVal e As _ Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs) _ Handles list1.ErrorAddDataBoundRow Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row If TypeOf (e.InnerException) Is NoNullAllowedException Then row("Id") = id id += 1 e.Retry = True End If End Sub
private void list1_ErrorAddDataBoundRow(object sender, Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs e) { System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row; if (e.InnerException is NoNullAllowedException) { row["Id"]= id; id++; e.Retry = true; } }
コードのコンパイル方法
- このコード例では、list1 という ListObject がワークシートに既にあり、そこにこのコードが表示されると仮定しています。
参照
処理手順
方法 : ListObject コントロールに新規行が追加された場合にデータを検証する
概念
アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張
その他の技術情報
変更履歴
[日付] |
[履歴] |
原因 |
---|---|---|
2008 年 7 月 |
アプリケーション レベルのアドインで使用できる例を変更 |
SP1 機能変更 |