Excel 2010テンプレートプロジェクトを作成しています。私のテンプレートでは、スタティックListObject
のコントロールを持つシートが多数あります。 ListObject
を初期化するには、BindingList<MyCustomType>
をバインドして、私のMyCustomType
公開プロパティごとに列を生成します。 ListObject
のいくつかの行が自動的に私のBindingList
インスタンスを埋め尽くすので、それは本当に便利です。 Excelリボンにボタンを追加して、プログラムがEDMを通じてこれらの行を検証してコミットできるようにしました。これは私のデータをExcelシートのスタートアップイベントハンドラのListObjectにバインドする方法です。VSTO Excel:ファイルを開くときにListObjectデータソースを復元する
public partial class MyCustomTypesSheet
{
private BindingList<MyCustomType> myCustomTypes;
private void OnStartup(object sender, System.EventArgs e)
{
ExcelTools.ListObject myCustomTypeTable = this.MyCustomTypeData;
BindingList<MyCustomType> customTypes = new BindingList<MyCustomType>();
myCustomTypeTable.SetDataBinding(customTypes);
}
// Implementation detail...
}
私の問題は、このテンプレートのユーザーが多くのセッションでこれらの行を入力する可能性が高いことです。つまり、データを入力し、ファイルを保存し、閉じ、再オープンし、いくつかの新しい行を入力し、最終的に彼が完了したと思うときにこれらの行をコミットしようとします。私が気づいたのは、テンプレートから作成されたExcelファイルを再度開くと、ListObjectコントロールのDataSourceプロパティがnullであることです。つまり、ListObject
のデータをBindingList<MyCustomType>
に戻す方法がありません。私は検索していましたが、自動的にそれを行う方法が見つからず、すべての列をクロールしてMyCustomType
のインスタンスを再作成するコードを作成したくはありません。理想的な世界で私はこのようにしたでしょう。
private void OnStartup(object sender, System.EventArgs e)
{
ExcelTools.ListObject myCustomTypeTable = this.MyCustomTypeData;
BindingList<MyCustomType> customTypes = null;
if (myCustomTypeTable.DataSource == null) // Will always be null and erase previous data.
{
customTypes = new BindingList<MyCustomType>();
myCustomTypeTable.SetDataBinding(customTypes);
}
else
{
customTypes = myCustomTypeTable.DataSource as BindingList<MyCustomType>;
}
}
私はこの上の多くの研究を行ってきたが、私はあなたのいくつかは、私はこの問題を解決するのに役立つことを願って解決策を見つけることができませんでした。
ありがとうございました。