【问题标题】:How do I bind my properties from my ExpandedHomeSlider class to SPListItemCollection?如何将 ExpandedHomeSlider 类中的属性绑定到 SPListItemCollection?
【发布时间】:2023-03-11 23:01:01
【问题描述】:

我创建了公共类 HeroImage 和 ExpandedHomeSlider 来访问将提供给中继器的自定义列表,以便轻松修改 SPListItem。 如何将我的 ExpandedHomeSlider 类中的属性绑定到 SPListItemCollection? 我是 SP 开发新手。任何帮助表示赞赏:]。

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>

【问题讨论】:

    标签: c# .net properties sharepoint-2010 user-controls


    【解决方案1】:

    您需要做的第一个想法是将SPListItem 对象的集合转换为自定义对象的集合。 Select 是一种可以为您执行此操作的 LINQ 方法。然后你可以将它绑定到你的中继器:

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

    在网站注释上,有一个名为“SPMetal”的工具能够为您生成这样的类,因此您无需自己创建它们。 (它们有相当多的设计差异,但每个字段都有一个属性的总体目标是相同的。)

    【讨论】:

    • //嗯,我以为我应该使用类似于此的 foreach 循环? foreach(myItems 中的 ExpandedHomeSlider 字段){ myItems["ExplanatoryText"] = field.ExplanatoryText; }
    • 我同意你的说法,但是没有办法用 foreach 循环而不是 linq 语句来做到这一点吗? @Servy
    • @Fawn 当然可以编写使用foreach 循环的解决方案。您提供的内容不会满足您的要求,但如果您真的想要显式编写foreach 循环,您可以编写一个解决方案来执行此操作。我认为没有令人信服的理由这样做。它当然不会改进代码。
    • 我很困惑如果我做了一个 foreach 循环,我的循环里面会发生什么? foreach(myItems 中的 ExpandedHomeSlider 项目){ myItems.??? = item["ExplanatoryText"].ToString(); } @Servy
    • @Fawn 最简单的选择可能是创建一个List&lt;ExpandedHomeSlider&gt;,然后为每个SPListItem 转换对象并将其添加到列表中,然后绑定到列表。
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多