用程序去创建一个List是非常简单的事情,但是如何去创建一个带有Lookup类型的字段呢? 这就是本篇文章要尝试去做的事情。
用程序去创建一个List是非常简单的事情,但是如何去创建一个带有Lookup类型的字段呢? 这就是本篇文章要尝试去做的事情。
前期准备工作: 在站点上有一个List,叫UserInformation,里面有一个字段Username。随便往里面添加几条记录,等会我们会用到。
下面就开始写代码了。
[第1步] 打开VS2008,创建一控制台应用程序,添加对“Microsoft.SharePoint.dll”的引用。
[第2步] 添加代码如下:
Code
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace CreateListWithLookupColumn
{
class Program
{
static void Main(string[] args)
{
string siteURL = "Http://mysite"; //此处换成实际的站点地址
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.AllWebs[0])
{
//添加一个名叫TestLookUp的List.
Guid newListGuid = web.Lists.Add("TestLookUp", "用来测试Lookup字段.", SPListTemplateType.GenericList);
SPList newList = web.Lists[newListGuid]; //取得刚才添加的List.
//给List添加一个普通文本类型的字段.
SPField fldLanguage = (SPFieldText)newList.Fields.CreateNewField(SPFieldType.Text.ToString(), "Language");
fldLanguage.Description = "添加一个普通的测试文本类型的字段,名字叫Language";
fldLanguage.Required = true; //在新建项目时,此字段是否是必填的.
newList.Fields.Add(fldLanguage);
//添加一个Lookup类型的字段.
string fieldName = "MyLookupColumn"; //要添加的测试字段
SPList lookupList = web.Lists["UserInformation"]; //要在此UserInformation中取值
Guid lookupGuid = new Guid(lookupList.ID.ToString());
//先添加一Lookup类型字段,然后再指定其要在哪个List的哪个Column中取值.
newList.Fields.AddLookup(fieldName, lookupGuid, false);
SPFieldLookup splookup = newList.Fields[fieldName] as SPFieldLookup;
splookup.LookupField = lookupList.Fields["Username"].InternalName;
splookup.Update();
newList.Update();
}
}
Console.WriteLine("Ok");
Console.ReadKey();
}
}
}
其实代码没有什么好讲的,注释也都加上了,基本一眼就能看明白。倒是有一个地方需要注意:
splookup.LookupField = lookupList.Fields["Username"].InternalName;
这里面要用InternalName,而不是lookupList.Fields["Username"]。如果只是用lookupList.Fields["Username"],有时会取不到值。
[第3步] 程序执行完之后,就可以到网站中查看结果了。
当添加一个新记录时,就会看到LOOKUP字段已经生成了。
总结:此代码美中不足的,没有给List创建一个新的View,新添加的字段不能立刻显示在页面上。
源码地址:https://files.cnblogs.com/hearticy/CreateListWithLookupColumn.rar
致力于SharePoint开发.
QQ:28748451.