以编程方式创建的文档集项始终是一个文件夹

时间:2017-11-14 20:10:05

标签: c# sharepoint sharepoint-2010 splistitem

通过编程方式创建列表项我遇到了问题。 szenario:

  • 包含自定义内容类型和字段的2个列表(Changes-CustomDocSet Lib,Risks-Custom Task List)

  • 更改列表的新/编辑表单包含一个显示风险列表项目的DataGrid女巫

显示我在风险列表中手动创建的所有项目。现在,我可以使用“添加”按钮从“更改”列表的新/编辑表单中添加其他项目。我可以插入,但该项目未显示在网格中。

新变更形式列表中的风险项目:

enter image description here

为什么呢?如果我查看我的风险列表,我可以看到插入的项目,但它不是项目,它显示为文件夹类型。

添加新风险项:

enter image description here

这是我添加项目的实现:

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中创建,但我不知道为什么以及如何更改它?我需要正常的物品,而不是文件夹。

手动与编程项目:

enter image description here

任何想法?

更新:

我已经尝试设置CT,但没有成功。我现在使用没有自定义内容类型的标准任务列表,但它总是创建一个文件夹而不是项目。

调试时,一切看起来都很好:

Debugging item creation

3 个答案:

答案 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();