2

我来自 PHP,我认为我不了解如何正确浏览数据结构。SPFieldCollection.Add的文档非常清楚它需要什么样的参数,所以我写了一个类:

namespace SPAPI.Lists.Add
{
    class AddParams
    {
        public SPFieldType type { get; set; }
        public bool required { get; set; }
    }
}

从那里我创建了一个列表:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, List<AddParams>> columns, string name, string description, SPListTemplateType type)
{
    SPSite siteCollection = properties.Feature.Parent as SPSite;
    if (siteCollection != null)
    {
        SPWeb web = siteCollection.RootWeb;
        web.Lists.Add(name, description, type);
        web.Update();

        // Add the new list and the new content.
        SPList spList = web.Lists[name];
        foreach(KeyValuePair<string, List<AddParams>> col in columns){
            spList.Fields.Add(col.Key, col.Value[0], col.Value[1]);
        }

        // More Code ...
    }
}

问题是,它不喜欢col.Value[0]col.Value[1]因为一个不是 a SPFieldType,另一个不是boolean严格定义的 a 。我认为我的想法是正确的,但我正在寻找有关如何完成这项工作的指导。

因为 C# 有类型提示,所以我假设它会使用AddParams类来查看类型。

这个想法是传递一系列参数并基于这些参数创建一个新列表。

这更像是一个 C# 问题和数据结构迭代问题,然后是一个 SP 开发问题。

4

3 回答 3

4

两者col.Value[0]都是类型col.Value[1]AddParams这可能会编译:

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required);

但你可能需要另一个foreach在你的foreach

foreach(AddParams item in col.Value)
{
}
于 2013-06-04T19:19:27.543 回答
1

改变

spList.Fields.Add(col.Key, col.Value[0], col.Value[1]);

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required);
于 2013-06-04T19:22:48.660 回答
-1

为什么你有清单AddParamsFieldType您是否期望同一字段超过 1 个?

我认为你应该这样实现它:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, AddParams> columns, string name, string description, SPListTemplateType type)
{
    SPSite siteCollection = properties.Feature.Parent as SPSite;
    if (siteCollection != null)
    {
        SPWeb web = siteCollection.RootWeb;
        web.Lists.Add(name, description, type);
        web.Update();

        // Add the new list and the new content.
        SPList spList = web.Lists[name];
        foreach(string key in columns.Keys){
            spList.Fields.Add(key, columns[key].type, columns[key].required);
        }

        // More Code ...
    }
}
于 2013-06-06T17:54:42.113 回答