以编程方式设置SharePoint列表项的字段值

7

我希望在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 吗? - cement
4个回答

10

尝试:

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

尽管这两个看起来等价,但上面的代码与下面的代码并不相同:

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

想要获得更多信息,请参见此处此处,这些文章记述了相同的问题。


1
他们为什么会把索引器搞得这么糟糕呢?:/ - Dynde
@Dynde 他们不会。这与返回并修改值类型没有区别。只是返回了一个新的对象。 - user166390

3

你可以尝试使用以下代码添加新字段并设置默认值。这是未经测试的代码,请告诉我结果如何。

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

1

0
从上面的所有讨论中,似乎您正在尝试在列表事件处理程序中设置字段值,并且您正在item adding或item updating事件中设置该值。如果是这种情况,则需要考虑AfterProperties。请记住,我们有*ing和*ed事件,在*ing事件的情况下,我们需要使用BeforeProperties和AfterProperties进行操作。
希望这可以帮助您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接