是否可以列出DataBinder.Eval()中的所有表达式?

时间:2009-07-15 18:13:28

标签: c# data-binding repeater

我有一个可以数据绑定到SQL数据库的Repeater。要访问该信息,请执行以下操作:

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

我需要访问其他属性(表达式?作为智能感知),但我不确定他们的名字是什么。我可以遍历e.Item.DataItem并获取所有表达式的名称吗?

我已经提出了this question,但我觉得我还不清楚。该帖子的结果给了我看起来像数据库中的表结构,而不是实际的表达式名称/值:

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

获取值并不重要,只是表达式的名称。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你可能指的是所谓的字段(本质上是在类级别声明并公开的变量)。您可以使用我在其他Q& A线程中提供的相同方法,只需稍加修改:

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

当我为属性创建代码时,我并没有真正想到这一点,因为我几乎从不公开在我的课程中公开字段。

当我需要知道对象的界面是什么样的时候,我经常发现在调试器中简单地添加一个断点是最容易的,并且添加一个监视来更仔细地检查对象。这将揭示所有(非方法)成员及其类型(以及当前内容)。

答案 1 :(得分:0)

您的其他帖子的答案似乎也是这个问题的答案。要获得您正在寻找的“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并获取每个属性并将其Name和Value输出到控制台。如果你的作者没有出现在结果列表中,那么它可能不是属性而是公共Field,所以你应该看看GetFields()或其他一些方法。 / p>

使用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)));
}