以编程方式设置sharepoint listitem的字段值

时间:2010-10-11 06:44:20

标签: c# sharepoint sharepoint-2007 spfield

我正在尝试简单地将一个简单的文本或超链接字段添加到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();所以我至少不会错过这一点。谁能告诉我我做错了什么?

由于

4 个答案:

答案 0 :(得分:10)

尝试:

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

虽然看似相同,但上述代码与以下代码不同:

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

我总是发现最好的路径是直接获取对列表项的引用并进行具体更新,而不是使用索引器路由。就像富人的第一个例子一样提到。

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

答案 3 :(得分:0)

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

我希望这有帮助!