我有一个可以数据绑定到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
获取值并不重要,只是表达式的名称。
谢谢!
答案 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)));
}