2009-07-15 50 views
1

我有一个数据绑定到SQL数据库的Repeater。要访问我做了以下的信息:是否可以列出DataBinder.Eval()中的所有表达式?

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

我想你可能指的是所谓的字段(基本上是在课堂上声明并公开的变量)。您可以使用我的其他Q &线程提供的同样的方法,用一个小的修改:

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

我真的没有想到,当我为属性的代码,因为我几乎没在我的课堂上公开领域。

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

+0

不幸的是吧。当我运行它,我得到一个空白字符串(我稍微修改你的代码以将文本附加到字符串生成器,而不是输出到控制台,感谢您继续输入! – Anders 2009-07-15 18:34:35

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并抓住每一个特性,并输出其名称和值到控制台。如果你的作者没有出现在结果列表中,那可能是它不是一个属性,而是一个公共字段,所以你应该看看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

嗯,它必须是别的东西。与Fredrik的代码相同的结果,只是实际值(即:UrlWithExtension:〜/ Libraries/Activation_Key/Activation_Key.sflb.ashx)而不是类型:(。 – Anders 2009-07-15 18:39:57

相关问题