Можно ли получить имена свойств из элемента данных? - PullRequest
0 голосов
/ 15 июля 2009

У меня есть этот код позади, который проверяет каждый элемент в повторителе, когда он привязан к данным, чтобы увидеть, являются ли автор / дата пустыми (либо нет автора / даты, либо система настроена так, чтобы не отображать их), чтобы я можете очистить их соответствующие метки. Это так, что я не получаю что-то вроде «Опубликовано», когда не указан автор и / или дата.

Вот код:

protected void Page_Load(object sender, EventArgs e)
{
    repeater.ItemDataBound += new RepeaterItemEventHandler(repeater_ItemDataBound);    
}

void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Literal PostedBy = (Literal)e.Item.FindControl("litPostedBy");
        Literal PostedOn = (Literal)e.Item.FindControl("litPostedOn");
        string Author = (string)DataBinder.Eval(e.Item.DataItem, "Author");
        string Date = (string)DataBinder.Eval(e.Item.DataItem, "PubDate");

        if (string.IsNullOrEmpty(Author))
        {
            if (string.IsNullOrEmpty(Date))
            {
                PostedBy.Text = "";
                PostedOn.Text = "";
            }
            else
            {
                PostedBy.Text = "Posted ";
            }

        }
    }
}

Я использую CMS, и я не уверен, что все свойства в e.Item.DataItem. Есть ли какой-нибудь способ, которым я могу перебрать DataItem и распечатать имена / значения свойств?

Спасибо!

1 Ответ

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

Какие свойства будет иметь DataItem, зависит от того, какой объект он содержит. Он будет содержать объект из источника данных, который в данный момент обрабатывается при привязке данных к повторителю. Следующий метод берет любой объект и перечисляет свойства, которые он содержит:

private static void PrintAllProperties(object obj)
{
    obj.GetType().
        GetProperties().
        ToList().
        ForEach(p => 
            Console.WriteLine("{0} [{1}]", p.Name, p.PropertyType.ToString()
            ));
}

Пример вывода (для экземпляра String):

Chars [System.Char]
Length [System.Int32]
...