MOSS SDK学习(4)
这个例子演示在客户端中给列表加入列。
例子之前首先要熟悉几个概念:
一个Sharepoint的站点集是最上层的概念,它的对象模型是SPSite;每个站点集下面有很多个站点(SPWeb),比如我们sharepoint中的文档库和博客等,那么对应的文档库这个站点下又有很多列表(SPList),就比如文档库下面有文档列表和任务列表等,每个列表下又有很多视图(SPView),视图就是我们常看到的所有文档视图或者资源管理器视图等,当然我们也可以创建自己的视图。
我们的例子是要在列表中加入字段,首先我们创建列表时一般是从一个内容类型为基础创建的,那么列表中的字段也是从内容类型继承的,我们想加入字段的话可以直接在列表中加入(不涉及内容类型),在列表中加入后还需要把字段加入到列表的默认视图中去,这样才能在一览中来显示。
演示效果:
我这个例子就是演示加入一个最简单的文本列,当然也可加入其它类型的。
主要代码如下:
1、在ListBox中显示出列表中已经有的列
//取得文档库下所有的列名
SPWeb rootWeb = _siteCollection.AllWebs["Docs"];
SPList docList = rootWeb.Lists["文档"];
SPFieldCollection fields = docList.Fields;
SPViewFieldCollection viewFields = docList.DefaultView.ViewFields;
foreach (SPField field in fields)
{
//非隐藏的列
if (!field.Hidden)
{
//是否在默认视图中显示
if (viewFields.Exists(field.InternalName))
{
listBox1.Items.Add(field.Title);
}
}
}
SPWeb rootWeb = _siteCollection.AllWebs["Docs"];
SPList docList = rootWeb.Lists["文档"];
SPFieldCollection fields = docList.Fields;
SPViewFieldCollection viewFields = docList.DefaultView.ViewFields;
foreach (SPField field in fields)
{
//非隐藏的列
if (!field.Hidden)
{
//是否在默认视图中显示
if (viewFields.Exists(field.InternalName))
{
listBox1.Items.Add(field.Title);
}
}
}
2、加入新的列
SPWeb site = _siteCollection.AllWebs["Docs"];
SPList list = site.Lists["文档"];
SPView view = list.Views["所有文档"];
SPViewFieldCollection viewFields = view.ViewFields;
SPFieldCollection fields = list.Fields;
//加入新的列
fields.Add("ccc", SPFieldType.Text, true);
fields["ccc"].Hidden = false; //是否显示
list.Update();
SPField newViewField = list.Fields["ccc"];
viewFields.Add(newViewField);
view.Update();
SPList list = site.Lists["文档"];
SPView view = list.Views["所有文档"];
SPViewFieldCollection viewFields = view.ViewFields;
SPFieldCollection fields = list.Fields;
//加入新的列
fields.Add("ccc", SPFieldType.Text, true);
fields["ccc"].Hidden = false; //是否显示
list.Update();
SPField newViewField = list.Fields["ccc"];
viewFields.Add(newViewField);
view.Update();