VSTO Excel: Как создать собственное сопоставление столбцов с помощью ListObject? - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть такая модель:

public class Instrument
{
    public string Id { get; set; }
    public string Name { get; set; }

    // About 100 other properties
}

И я извлекаю экземпляры Instrument из Entity Framework EDM.

Теперь я хотел бы сделатьнастраиваемое сопоставление для привязки этого набора данных к объекту Excel ListObject.По умолчанию ListObject будет отображать каждый столбец на листе Excel, но я хочу показать только некоторые свойства в определенном порядке.

ExcelTools.ListObject instrumentsTable = this.Controls.AddListObject(tableStart, tableName);
instrumentsTable.DataSource = myEDM.Instruments;

// Custom mapping code...

Я пытался использовать метод SetDataBinding, но он вызывал исключение привязки данных.

Кто-нибудь может мне помочь в достижении этого?

Спасибо.

1 Ответ

7 голосов
/ 14 ноября 2011

Не знаю, полезно ли это, но я создал тестовый проект для этого. Тестовый проект выполняется без проблем.

Сначала я объявляю тестовый класс:

public class Instrument
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Property1 { get; set; }
    public string Property2 { get; set; }

}

У меня есть функция getInstruments, которая возвращает список.

Затем я привязываю это к листу, используя этот код:

        List<Instrument> list = getInstruments();
        ListObject instrumentsTable = Controls.AddListObject(Range["A1", "B4"], "list1");
        string[] mappedColumns = { "Name", "Property1" };
        instrumentsTable.SetDataBinding(list, string.Empty, mappedColumns);

Отображается лист с 4 инструментами, на котором в столбцах A и B указаны Имя и Свойство1.

Я также попробовал это с помощью Entity Framework, подключив лист к одной из моих баз данных, и не столкнулся с какими-либо проблемами.

Если у вас все еще есть проблемы, пожалуйста, предоставьте больше информации об исключении, которое вы получаете при использовании SetDataBinding.

...