私はExcel2010テンプレートプロジェクトに取り組んでいます。私のテンプレートにはListObject
、それぞれに静的コントロールが含まれるシートがたくさんあります。を初期化ListObject
するために、をバインドして、パブリックプロパティBindingList<MyCustomType>
ごとに列を生成します。ユーザーがのいくつかの行を使用すると、インスタンスが自動的にいっぱいになるMyCustomType
ため、非常に便利です。プログラムがEDMを介してこれらの行を検証およびコミットできるように、Excelリボンにボタンを追加しました。これは、Excelシートの1つの起動イベントハンドラーでデータをListObjectにバインドする方法です。ListObject
BindingList
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>;
}
}
私はこれについて多くの研究を行ってきましたが、解決策を見つけることができなかったので、あなたの何人かがこの問題を解決するのを手伝ってくれることを願っています。
ありがとう。