2009-07-15 57 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

相關問題