Я работаю над проектом шаблона Excel 2010.В моем шаблоне у меня есть много листов со статическими ListObject
элементами управления в каждом из них.Чтобы инициализировать мой ListObject
, я связываю BindingList<MyCustomType>
, чтобы он генерировал столбец для каждого из моих MyCustomType
открытых свойств.Это действительно удобно, потому что когда пользователь вводит строки в ListObject
, он автоматически заполняет мой экземпляр BindingList
.Я добавил кнопку на ленте Excel, чтобы программа могла проверять и фиксировать эти строки с помощью EDM.Вот как я связываю свои данные с объектом ListObject в обработчике событий запуска одного из моих листов Excel.
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, созданного из шаблона, свойство DataSource моих элементов управления ListObject имеет значение 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>;
}
}
Я провел много исследований по этому вопросу, но не смог найти решение, поэтому надеюсь, что некоторые из вас помогут мне решитьэтот выпуск.
Спасибо.