2014-02-07 42 views
0

我創建了公共類HeroImage和ExpandedHomeSlider來訪問一個自定義列表,該列表將被賦予給Repeater以便允許修改SPListItem。 如何將我的屬性從ExpandedHomeSlider類綁定到SPListItemCollection?我是SP開發新手。任何幫助表示讚賞:]。如何將我的屬性從ExpandedHomeSlider類綁定到SPListItemCollection?

public partial class HomePageHeroRotator : UserControl 
{ 
    public SPListItem SpListItem; 

    public class HeroImage 
    { 
     public SPListItem SpListItem; 
     public string heroImageUrl 
     { 
      get { return SpListItem["HeroImage"].ToString(); } 
     } 
     public string heroImageUrl2 
     { 
      get { return SpListItem["HeroImageCallOut"].ToString(); } 
     } 
    } 
    public class ExpandedHomeSlider 
    { 
     public SPListItem SpListItem; 
     public string explanatoryText 
     { 
      get { return SpListItem["ExplanatoryText"].ToString(); } 
     } 
     public string attentionExplanatoryText2 
     { 
      get { return SpListItem["ExplanatoryText"].ToString(); } 
     } 
     public string explanatoryText2 
     { 
      get { return SpListItem["ExplanatoryText"].ToString(); } 
     } 
     public string homeSliderImageUrl 
     { 
      get { return SpListItem["ExpandedSliderImage"].ToString(); } 
     } 
     public string GreenFlyoutText 
     { 
      get { return SpListItem["GreenFlyoutText"].ToString(); } 
     } 
    } 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Query List for all List Items 
     //ASCX to render list items 
     SPSite site = null; 
     if (SPContext.Current != null) 
     { 
      site = SPContext.Current.Site; 
     } 
     SPList list = site.RootWeb.Lists["HomePageHero"]; 

     SPListItemCollection myItems = list.Items; 
     IEnumerable eList = myItems.Fields as IEnumerable; 

     //foreach loop 

     HomePageHeroRpt.DataSource = eList; 
     HomePageHeroRpt.DataBind(); 

}

我Schema.xml的列表中包含了以下字段:

 <ViewFields> 
     <FieldRef Name="LinkTitle" /> 
     <FieldRef Name="ExplanatoryText" /> 
     <FieldRef Name="GreenFlyoutText" /> 
     <FieldRef Name="BrownFlyoutText" /> 
     <FieldRef Name="RedFlyoutText" /> 
     <FieldRef Name="OrangeFlyoutText" /> 
     <FieldRef Name="LightBlueFlyoutText" /> 
     <FieldRef Name="BlueFlyoutText" /> 
     <FieldRef Name="AttentionExplanatoryText" /> 
     <FieldRef Name="ExplanatoryText2" /> 
     <FieldRef Name="HeroImage" /> 
     <FieldRef Name="HeroImageCallOut" /> 
     <FieldRef Name="ExpandedSliderImage" /> 
    </ViewFields> 

回答

0

首先認爲你需要做的是改變你的SPListItem對象的集合到自定義對象的集合。 Select是一種可以爲你做到這一點的LINQ方法。然後,你可以綁定,爲您的轉發器:

HomePageHeroRpt.DataSource = list.Items.Cast<SPListItem>() 
    .Select(item => new ExpandedHomeSlider(){SpListItem = item}); 

的網站上注意到有一個名爲「SPMetal」工具能夠生成類這樣對你的,這樣你就不需要創建它們在你自己的。 (他們有一些設計差異,但爲每個領域的財產的一般目標是相同的。)

+0

//嗯我以爲我應該使用類似這樣的foreach循環? foreach(myItems中的ExpandedHomeSlider字段) myItems [「ExplanatoryText」] = field.ExplanatoryText; } – Fawn

+0

我同意你的意思,但沒有辦法用foreach循環而不是linq語句來做到這一點嗎? @Servy – Fawn

+0

@Fawn當然有一些解決方案可以使用'foreach'循環。你提供的內容不會做你想做的事情,但如果你真的想要明確地寫一個'foreach'循環,你可以寫一個解決方案。在這裏我沒有看到有這樣的理由。它當然不會改善任何代碼。 – Servy

相關問題