Как я читаю привязки данных для Excel ListObject - PullRequest
1 голос
/ 18 сентября 2010

У меня есть приложение VS 2010 Excel 2007 Workbook. У меня есть ListObject, который связан с источником данных объекта через источник привязки. Я хочу иметь возможность определить, с каким свойством моего объекта связан любой данный объект ListColumn в коллекции ListColumns моего ListObject. В приведенном ниже примере я использую имя столбца, чтобы найти столбец, связанный со свойством «Field1». Однако в моей ситуации имя столбца может отличаться от имени свойства. В объекте ListColumn отсутствует свойство DataMember, DataPropertyName или подобное свойство. Как определить, какой столбец связан с каким свойством?

Учитывая класс и ListObject ниже, я хочу иметь возможность использовать следующий код:



return FindColumn(MyDataListObject, "Property1")




Public Class MyData
    Public Property Field1 As String
    Public Property Field2 As Date
End Class

   Public Function FindColumn(ByVal listObject As ListObject, 
ByVal propertyName As String) As ListColumn
        For Each col As ListColumn In listObject.ListColumns
            If col.Name = propertyName Then
                Return col
            End If
        Next
        Return Nothing
    End Function

1 Ответ

2 голосов
/ 26 ноября 2010

У меня похожая ситуация, и мне нужны столбцы с привязкой к рисунку в Excel.

К сожалению, VSTO скрывает поля, в которых хранится информация.

Единственный способ получить доступ к этой информации с помощьюSystem.Reflection.

См. Ниже небольшой пример:

    public static string[] GetListObjectMappedColumns(ListObject listObject)
    {
        Tools.ListObject vstoListObject = Globals.Factory.GetVstoObject(listObject);
        FieldInfo fieldInfo = vstoListObject.GetType().GetField("mappedProperties", BindingFlags.Instance | BindingFlags.NonPublic);
        object value = fieldInfo.GetValue(vstoListObject);
        if (value is PropertyDescriptor[])
        {
            List<string> result = new List<string>();
            foreach (PropertyDescriptor propertyDescriptor in (PropertyDescriptor[])value)
                result.Add(propertyDescriptor.Name);
            return result.ToArray();
        }
        return null;
    }

Я надеюсь помочь вам!

Teobaldo

...