Можно ли перечислить все выражения из DataBinder.Eval ()? - PullRequest
1 голос
/ 15 июля 2009

У меня есть повторитель, который привязан к базе данных SQL. Для доступа к информации я делаю следующее:

string Author = (string)DataBinder.Eval(e.Item.DataItem, "Author");

Существуют и другие свойства (выражения? Как выражается в intellisense), к которым мне нужно получить доступ, но я не уверен в их названиях Могу ли я перебрать e.Item.DataItem и получить имена всех выражений?

Я задал этот вопрос , вроде как, но я думаю, что я был неясен. Результат этого поста дал мне то, что выглядит как структура таблицы из базы данных, а не фактические имена / значения выражений:

UrlWithExtension [System.String]
ThumbnailUrl [System.String]
Content [System.Object]
Language [System.String]
// etc

Получение значений не очень важно, просто имена выражений.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 июля 2009

Ответ на ваш другой пост также является ответом на этот пост. Чтобы получить "Expresions", которые вы ищете, вы можете сделать что-то вроде этого ...

var props = e.Item.DataItem.GetType().GetProperties();

foreach (var item in props)
{
    Console.WriteLine(string.Format("{0}:{1}", item.Name, DataBinder.Eval(e.Item.DataItem, item.Name)));
}

Этот цикл пройдет через ваш DataItem, захватит каждое свойство и выведет его имя и значение на консоль. Если ваш Автор не отображается в списке результатов, возможно, это не свойство, а открытое поле, поэтому вам следует взглянуть на GetFields () или некоторые другие методы.

Пример использования GetFields ...

var props = e.Item.DataItem.GetType().GetFields();

foreach (var item in props)
{
    Console.WriteLine(string.Format("{0}:{1}", item.Name, DataBinder.Eval(e.Item.DataItem, item.Name)));
}
0 голосов
/ 15 июля 2009

Я думаю, что вы, возможно, имеете в виду то, что называется полями (по сути, переменные, которые объявлены на уровне класса и обнародованы). Вы можете использовать тот же метод, который я предоставил в этом другом потоке вопросов и ответов, с небольшой модификацией:

obj.GetType().
    GetFields().
    ToList().
    ForEach(p =>
        Console.WriteLine("{0} [{1}]", p.Name, p.FieldType.ToString()
        ));

Я не задумывался об этом, когда создавал код для свойств, поскольку почти никогда не выставлял поля публично в своих классах.

Когда мне нужно узнать, как выглядит интерфейс объекта, мне часто проще всего просто добавить точку останова в отладчике и добавить часы для проверки объекта немного ближе. Это покажет всех (не метод) членов и их типы (а также текущий контент).

...