通过编程方式创建列表项我遇到了问题。 szenario:
包含自定义内容类型和字段的2个列表(Changes-CustomDocSet Lib,Risks-Custom Task List)
更改列表的新/编辑表单包含一个显示风险列表项目的DataGrid女巫
显示我在风险列表中手动创建的所有项目。现在,我可以使用“添加”按钮从“更改”列表的新/编辑表单中添加其他项目。我可以插入,但该项目未显示在网格中。
新变更形式列表中的风险项目:
为什么呢?如果我查看我的风险列表,我可以看到插入的项目,但它不是项目,它显示为文件夹类型。
添加新风险项:
这是我添加项目的实现:
SPListItem item = list.Items.Add();
item["ChangeReference"] = "1";
item[SPBuiltInFieldId.Title] = title.Text;
item["Title"] = title.Text;
item["Risk"] = risk.Text;
item["Probability"] = probability.Text;
item.Update();
列表定义仅包含我的自定义内容类型:
<List xmlns:ows="Microsoft SharePoint" Title="Risks" FolderCreation="FALSE" Direction="$Resources:Direction;" EnableContentTypes="TRUE" Url="Lists\Risks" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
<MetaData>
<ContentTypes>
<ContentTypeRef ID="0x0108009007F1B9465C48F2AE80B77CC58A4AA7" />
</ContentTypes>
...
手动创建的项目可以在list.Items中找到,programmitcally创建的项目总是在list.folders中创建,但我不知道为什么以及如何更改它?我需要正常的物品,而不是文件夹。
手动与编程项目:
任何想法?
更新:
我已经尝试设置CT,但没有成功。我现在使用没有自定义内容类型的标准任务列表,但它总是创建一个文件夹而不是项目。
调试时,一切看起来都很好:
答案 0 :(得分:1)
我无法找到该问题的解决方案,因此我使用CSOM的解决方法。
var clientContext = new ClientContext(SPContext.Current.Web.Url);
var oList = clientContext.Web.Lists.GetByTitle("Risks");
var itemCreateInfo = new ListItemCreationInformation();
var oListItem = oList.AddItem(itemCreateInfo);
oListItem["Title"] = title.Text;
oListItem["Risk"] = risk.Text;
oListItem["Probability"] = probability.Text;
oListItem["Severity"] = severity.Text;
oListItem["ChangeReference"] = int.Parse(this.Page.Request.QueryString["ItemId"]);
oListItem.Update();
clientContext.Load(oListItem);
clientContext.ExecuteQuery();
答案 1 :(得分:0)
每当您添加列表项时,您的内容类型都不会被设置。
假设您的内容类型名称为Example Content Type
,您可以尝试以下代码。根据您的内容类型名称修改它:
SPContentType spctExampleContentType = list.ContentTypes["Example Content Type"];
SPListItem item = list.Items.Add();
item["ChangeReference"] = "1";
item[SPBuiltInFieldId.Title] = title.Text;
item["Title"] = title.Text;
item["Risk"] = risk.Text;
item["Probability"] = probability.Text;
spliNewItem["ContentTypeId"] = spctExampleContentType.Id;
item.Update();
答案 2 :(得分:0)
尝试将项目添加到RootFolder.Items:
SPListItem item = list.RootFolder.Items.Add();