【问题标题】:Programmatically setting field value for sharepoint listitem以编程方式设置共享点列表项的字段值
【发布时间】:2010-10-11 06:44:20
【问题描述】:

我正在尝试简单地将一个简单的文本或超链接字段添加到 sharepoint 2007 中的列表项。

我可以添加字段没问题:

list.Fields.Add("MyField",SPFieldType.Text, false);

它在我的列表项上显示得很好。 但是,无论我尝试哪种方式,我都无法以编程方式为该字段设置值。我试过了:

list.items[0]["MyField"] = "text";

我尝试加载到一个字段中:

SPField field = list.items[0].Fields["MyField"];

在那里设置它,设置默认值并更新,但什么都没有发生。

我总是用 list.update(); 完成我的代码块;或者如果我正在对项目本身进行操作 item.update();所以我至少没有错过这一点。谁能告诉我我做错了什么?

谢谢

【问题讨论】:

  • 列表中是否启用了 ContentTypes?

标签: c# sharepoint sharepoint-2007 spfield


【解决方案1】:

试试:

SPListItem item = list.items[0];
item["MyField"] = "text";
item.Update();

虽然看起来等价,但上面的代码不一样:

list.items[0]["MyField"] = "text";
list.items[0].Update();

有关更多信息,请参阅herehere,了解记录相同行为的人。

【讨论】:

  • 为什么他们会把索引器搞得这么糟糕? ://
  • @Dynde 他们没有。这与返回和修改值类型没有什么不同。只是返回了一个new对象。
【解决方案2】:

您可以尝试使用此方法添加新字段并设置默认值吗?未经测试的代码。让我知道事情的后续。

SPFieldText fldName = (SPFieldText)list.Fields.CreateNewField(SPFieldType.Text.ToString(), "mycolumn");
fldName.DefaultValue = "default";
list.Fields.Add(fldName);
list.Update();

【讨论】:

    【解决方案3】:

    我一直发现最好的方法是直接获取对列表项的引用并专门更新,而不是使用索引器路由。就像富人的第一个例子提到的那样。

    http://www.sharepointdevwiki.com/display/public/Updating+a+List+Item+programmatically+using+the+object+model

    【讨论】:

      【解决方案4】:

      从上面的所有讨论看来,您正在尝试在列表事件处理程序中设置字段值,并且您正在在项目添加或项目更新事件中设置值。如果是这种情况,那么您需要考虑 AfterProperties。请记住,我们有 *ing 和 *ed 事件,如果发生 *ing 事件,我们需要使用 BeforeProperties 和 AfterProperties。

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多