ListObject コントロールListObject control

ListObject コントロールは、イベントを公開するリストであり、データにバインドすることができます。The ListObject control is a list that exposes events and can be bound to data. ワークシートにリストを追加すると、ユーザーが Microsoft Office Excel オブジェクト モデルを走査する必要なく、直接、プログラムできる ListObject コントロールが Visual Studio により作成されます。When you add a list to a worksheet, Visual Studio creates a ListObject control that you can program against directly without having to traverse the Microsoft Office Excel object model.

適用対象: このトピックの情報は、ドキュメントに適用されます-レベルのプロジェクトおよび VSTO 追加-で Excel 用のプロジェクト。Applies to: The information in this topic applies to document-level projects and VSTO Add-in projects for Excel. 詳細については、「Office アプリケーションおよびプロジェクトの種類で使用できる機能」を参照してください。For more information, see Features available by Office application and project type.

コントロールを作成するCreate the control

ドキュメント レベルのプロジェクトでは、デザイン時または実行時に、ワークシートに ListObject コントロールを追加できます。In document-level projects, you can add ListObject controls to a worksheet at design time or at run time. VSTO アドイン プロジェクトでは、 ListObject コントロールをワークシートに追加できるのは実行時だけです。In VSTO Add-in projects, you can add ListObject controls to worksheets only at run time. 詳細については、「方法 :ListObject コントロールをワークシートに追加します。For more information, see How to: Add ListObject controls to worksheets.

Note

既定では、動的に作成されたリスト オブジェクトは、ワークシートを閉じる際に、ホスト コントロールとしてワークシートに残りません。By default, dynamically created list objects are not persisted in the worksheet as host controls when the worksheet is closed. 詳細については、「実行時に Office ドキュメントにコントロールを追加する」を参照してください。For more information, see Add controls to Office documents at run time.

コントロールにデータをバインドするBind data to the control

ListObject コントロールでは、単純または複雑なデータ バインディングがサポートされます。A ListObject control supports simple and complex data binding. ListObject コントロールは、デザイン時に DataSource プロパティと DataMember プロパティを使用して、または実行時に SetDataBinding メソッドを使用して、データ ソースにバインドすることができます。The ListObject control can be bound to a data source using the DataSource and DataMember properties at design time or the SetDataBinding method at run time.

Note

ListObject は、データが変更されるとイベントを発生させる DataTableなどのデータ ソースにバインドされると自動的に更新されます。The ListObject is updated automatically when it is bound to a data source, such as a DataTable, that raises events when the data changes. データが変更されたときにイベントを発生させないデータ ソースに ListObject をバインドする場合、 RefreshDataRow を更新するには RefreshDataRows または ListObjectメソッドを呼び出す必要があります。If you bind the ListObject to a data source that does not raise events when the data changes, you must call the RefreshDataRow or RefreshDataRows method to update the ListObject.

繰り返されるスキーマ要素をワークシート セルにマップして ListObject をそのセルに追加する場合、Visual Studio は ListObject を生成されたデータセットに自動的にマップします。When you add a ListObject to a worksheet cell by mapping a repeating schema element to that cell, Visual Studio automatically maps the ListObject to the generated dataset. ただし、 ListObject はデータに自動的にバインドされません。However, the ListObject is not automatically bound to the data. ドキュメント レベルでプロジェクトのデザイン時または実行時に ListObject をデータセットにバインドする手順を実行できます。You can take steps to bind the ListObject to the dataset at design time or at run time in a document-level project. VSTO アドインでは、 ListObject実行時にプログラムを使用してをデータセットにバインドできます。You can programmatically bind the ListObject to the dataset at run time in a VSTO Add-in.

データは ListObjectとは分離されているため、データの追加と削除は、 ListObjectから直接的にではなく、バインドされたデータセットを介して行う必要があります。Because the data is separate from the ListObject, you should add and remove data through the bound dataset, and not directly through the ListObject. バインドされたデータセット内のデータが任意のメカニズムにより更新された場合に、 ListObject コントロールが変更を自動的に反映します。If the data in the bound dataset is updated through any mechanism, the ListObject control automatically reflects the changes. 詳細については、「Office ソリューションでのコントロールへのデータのバインド」を参照してください。For more information, see Bind data to controls in Office solutions.

ListObject をデータ ソースにバインドすれば、 ListObject コントロールにすぐにデータを設定することができます。You can quickly fill a ListObject control by binding the ListObject to a data source. データにバインドされた ListObjectのデータを編集すると、データ ソースでも自動的に変更されます。If you edit the data in a data-bound ListObject, the changes are automatically made in the data source as well. ListObject にデータを設定し、ユーザーがデータ ソースを変更せずに ListObject のデータを変更できるようにする場合、 Disconnect メソッドを使用してデータ ソースから ListObject をデタッチすることができます。If you want to fill a ListObject and then enable the user to change the data in the ListObject without modifying the data source, you can use the Disconnect method to detach the ListObject from the data source. 詳細については、「方法 :ListObject コントロールにデータを入力します。For more information, see How to: Fill ListObject controls with data.

Note

重複する ListObject コントロールでは、データ バインディングはサポートされません。Data binding is not supported on overlapping ListObject controls.

ListObject コントロールでのパフォーマンスの向上Improve performance in ListObject controls

まずコントロールをバインドしてから ListObject を呼び出してデータセットにデータを設定する場合、データにバインドされた ReadXml コントロールに XML ファイルから読み込むときに時間がかかる傾向があります。Reading an XML file into a data-bound ListObject control tends to be slower if you bind the control first, and then call ReadXml to fill the dataset. パフォーマンスを向上させるには、コントロールをバインドする前に ReadXml を呼び出します。To improve performance, call ReadXml before you bind the control.

データソースからの ListObject コントロールの切断Disconnect ListObject controls from the data source

データ ソースにバインドして ListObject コントロールにデータを設定した後に、リスト オブジェクトのデータに加えられた変更がデータ ソースに影響しないように、そのデータソースから切断することができます。After you fill a ListObject control with data by binding it to a data source, you can disconnect it so that modifications made to the data in the list object do not affect the data source. 詳細については、「方法 :ListObject コントロールにデータを入力します。For more information, see How to: Fill ListObject controls with data.

列と行の順序の復元Restore column and row order

デザイン時にドキュメントに追加された ListObject コントロールにデータをバインドする場合、ブックを保存するたびに Visual Studio は列と行の順序を追跡し続けます。When you bind data to a ListObject control that was added to a document at design time, Visual Studio keeps track of the column and row order whenever the workbook is saved. 実行時にユーザーが ListObject の列または行を移動した場合、次にブックを開いたときは新しい順序が保持され、 ListObject コントロールはもう一度データ ソースにバインドされます。If a user moves the ListObject columns or rows during run time, the new order is preserved the next time the workbook is opened and the ListObject control binds to the data source again.

ListObject を元の列と行の順序に復元する場合、 ResetPersistedBindingInformation メソッドを呼び出すことができます。If you want to restore the ListObject to its original column and row order, you can call the ResetPersistedBindingInformation method. このメソッドは、指定した ListObjectの列と行の順序に関連付けられたカスタム ドキュメント プロパティを削除します。This method removes the custom document properties related to the column and row order of specified ListObject. Shutdown の列と行の順序を維持しない場合は、ブックの ListObjectイベントからこのメソッドを呼び出します。Call this method from the Shutdown event of the Workbook if you do not want to preserve the column and row order of the ListObject.

形式Format

ListObject に適用できる書式設定は、 ListObject コントロールに適用できます。Formatting that can be applied to a ListObject can be applied to a ListObject control. これには、罫線、フォント、番号形式、スタイルが含まれます。This includes borders, fonts, number format, and styles. エンドユーザーは、データバインドListObject内の列を再配置できます。デザイン時にListObjectがドキュメントに追加された場合、これらの変更はドキュメントと共に保持されます。End users can rearrange columns in a data-bound ListObject, and these changes will be persisted with the document, provided the ListObject was added to the document at design time. 次にドキュメントを開くとき、リスト オブジェクトは、同じデータ ソースにバインドされますが、列の順序についてはユーザーの変更が反映されます。The next time the document is opened, the list object will be bound to the same data source, but the column order will reflect the users' changes.

実行時の列の追加と削除Add and remove columns at run time

データにバインドされた ListObject コントロールで実行時に列を手動で追加または削除することはできません。You cannot manually add or remove columns in a data-bound ListObject control at run time. エンドユーザーが列を削除しようとすると、その列はすぐに復元され、追加された列はすべて削除されます。If an end user tries to delete a column, it will immediately be restored and any columns added will be removed. そのため、データにバインドされた ListObject でユーザーがこれらの操作を実行できない理由を説明するコードを記述しておくことは重要です。Therefore, it is important to write code to explain to users why they cannot perform these actions on a ListObject that is bound to data. Visual Studio では、データ バインディングに関連する ListObject の複数のイベントが提供されます。Visual Studio provides several events on a ListObject related to data binding. たとえば、 OriginalDataRestored イベントを使用すると、ユーザーが削除しようとしたデータは削除できず、復元されたことを示す警告をユーザーに表示できます。For example, you can use the OriginalDataRestored event to warn users that the data they have attempted to delete cannot be deleted and has been restored.

実行時の行の追加と削除Add and remove rows at run time

データ ソースで新しい行の追加が許可されており、読み取り専用ではない場合、データにバインドされた ListObject コントロールの行を手動で追加したり削除したりすることができます。You can manually add and remove rows in a data-bound ListObject control, provided the data source allows the addition of new rows and is not read-only. BeforeAddDataBoundRow などのイベントに対してコードを記述してデータを検証することができます。You can write code against events such as the BeforeAddDataBoundRow to validate the data. 詳細については、「方法 :ListObject コントロールに新しい行が追加されたときにデータを検証します。For more information, see How to: Validate data when a new row is added to a ListObject control.

リスト オブジェクトのデータ ソースとの関係が原因で、日常的にエラーが発生することがあります。Sometimes the relationship of the list object to the data source causes routine errors. たとえば、 ListObjectで表示する列をマップできますが、null 値を許容できないフィールドなどの制限がある列を省略する場合、行が作成されるたびにエラーが発生します。For example, you can map which columns you want to appear in the ListObject, so if you omit columns that have restrictions, such as a field that cannot accept null values, errors are raised every time a row is created. ErrorAddDataBoundRow イベントのイベント ハンドラーで、失われた値を追加するコードを記述することができます。You can write code to add the missing values in an event handler for the ErrorAddDataBoundRow event.

Excel での ListObject コントロールの名前変更Rename ListObject controls in Excel

Excel では、ユーザーが [デザイン] タブを使用して実行時に Excel の表の名前を変更できます。ただし、 ListObject コントロールではこの機能はサポートされていません。Excel enables users to change the name of Excel tables at run time by using the Design tab. However, the ListObject control does not support this feature. ユーザーが ListObjectに対応する Excel の表の名前を変更しようとした場合、ブックが保存されると、Excel の表の名前は自動的に元の名前に戻されます。If a user tries to rename an Excel table that corresponds to a ListObject, the name of the Excel table will automatically revert to the original name when the workbook is saved.

イベントEvents

次のイベントは ListObject コントロールに対して利用できます。The following events are available for the ListObject control:

関連項目See also