文档库查阅项栏 SPFieldLookup 赋值问题

xrongzhen 2011-03-14 10:57:01
新建文档库,添加自定义栏“类型”,查阅项,数据来源于列表(当前网站下列表“类型列表”)。

如何修改此文档库下“类型”栏,如何给“类型”赋值?

最好有简单事例。

using (SPWeb web = site.OpenWeb(""))
{

SPList list = web.Lists["类型列表"];
web.AllowUnsafeUpdates = true;
foreach(SPFolder folder in list.RootFolder.SubFolders)
{
if(folder.Name == "文件名称")
{
SPListItem item = folder.Item;

SPFieldLookup lookup = (SPFieldLookup)list.Fields["类型"];
if(lookup !=null)
{
//都不成功 直接"1;#文件夹"也不行
item["类型"] =new SPFieldLookupValue(1,"文件夹") ;
//item["类型"] =lookup.GetFieldValueAsText(new SPFieldLookupValue(1,"文件夹")) ;
item.Update();//会提示只读域 不允许更新类似的错误提示
}
}
}
web.AllowUnsafeUpdates = false;
}
...全文
231 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xrongzhen 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 forum2621 的回复:]
你给folder加lookup列的目的是做什么?
如果folder不能加或者会很麻烦来加lookup列,你也可以考虑下反过来把folder作为被lookup的项
[/Quote]

目的就是设置要添加文件夹得类型

上图,文件夹类型 只能是特定的几个,由其他列表维护
xrongzhen 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 forum2621 的回复:]
就目前位置,discussion 这种类型的folder是可以有查阅项的,一般的文档库的foder是只有名字这个属性。
如果你的folder可以显示多个属性,麻烦截个图看看
[/Quote]

xrongzhen 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 smzh001 的回复:]
如果定义了一个列表,列表中继承了文件夹格式的内容类型,那么在取值的时候不会很麻烦,和以前一样,但是你在赋值的时候需要指定这个Item的属性:如下
item.FileSystemObjextType=SPFileSystemObjectType.File;
然后既可以更新数据。
[/Quote]

最近比较忙,没顾得上这个问题 呵呵 稍后试下
forum2621 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 smzh001 的回复:]

如果定义了一个列表,列表中继承了文件夹格式的内容类型,那么在取值的时候不会很麻烦,和以前一样,但是你在赋值的时候需要指定这个Item的属性:如下
item.FileSystemObjextType=SPFileSystemObjectType.File;
然后既可以更新数据。
[/Quote]
folderitem.FileSystemObjextType=SPFileSystemObjectType.File;
这个会出错...

不过我在sp2010上有试了下,赋值成功

SPListItem folderitem = folder.Item;
folderitem["lll"] = new SPFieldLookupValue(2, "T2");
folderitem.Update();
smzh001 2011-03-21
  • 打赏
  • 举报
回复
如果定义了一个列表,列表中继承了文件夹格式的内容类型,那么在取值的时候不会很麻烦,和以前一样,但是你在赋值的时候需要指定这个Item的属性:如下
item.FileSystemObjextType=SPFileSystemObjectType.File;
然后既可以更新数据。
forum2621 2011-03-17
  • 打赏
  • 举报
回复
你给folder加lookup列的目的是做什么?
如果folder不能加或者会很麻烦来加lookup列,你也可以考虑下反过来把folder作为被lookup的项
forum2621 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 forum2621 的回复:]

就目前位置,discussion 这种类型的folder是可以有查阅项的,一般的文档库的foder是只有名字这个属性。
如果你的folder可以显示多个属性,麻烦截个图看看
[/Quote]
不过话说回来,你也可以研究下discussion 这种类型的folder来看看能否为你的folder加个其他字段
forum2621 2011-03-17
  • 打赏
  • 举报
回复
就目前位置,discussion 这种类型的folder是可以有查阅项的,一般的文档库的foder是只有名字这个属性。
如果你的folder可以显示多个属性,麻烦截个图看看
Justin-Liu 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xrongzhen 的回复:]
引用 9 楼 forum2621 的回复:
引用 8 楼 xrongzhen 的回复:

引用 7 楼 foxdave 的回复:
folder特殊,可以不算作listitem,就和explore里面的folder一样


那如何修改Folder的查阅项栏 不可能无法修改,手工能做,程序应该没啥问题啊

看msdn,http://msdn.microsoft.com/en-us/l……
[/Quote]
文件夹没有这些 就是单纯的文件夹而已 有个名字
xrongzhen 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 forum2621 的回复:]
引用 8 楼 xrongzhen 的回复:

引用 7 楼 foxdave 的回复:
folder特殊,可以不算作listitem,就和explore里面的folder一样


那如何修改Folder的查阅项栏 不可能无法修改,手工能做,程序应该没啥问题啊

看msdn,http://msdn.microsoft.com/en-us/library/dd587263%28v=off……
[/Quote]

手工改,就是修改属性啊。例如有个栏,是类型(查阅项), 修改就是选择下拉框的别的项啊
liangweijialiulin 2011-03-17
  • 打赏
  • 举报
回复
只需要赋上 id+";#" 就可以了,不用写后面的对应名称
xrongzhen 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foxdave 的回复:]
folder特殊,可以不算作listitem,就和explore里面的folder一样
[/Quote]

那如何修改Folder的查阅项栏 不可能无法修改,手工能做,程序应该没啥问题啊
forum2621 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xrongzhen 的回复:]

引用 7 楼 foxdave 的回复:
folder特殊,可以不算作listitem,就和explore里面的folder一样


那如何修改Folder的查阅项栏 不可能无法修改,手工能做,程序应该没啥问题啊
[/Quote]
看msdn,http://msdn.microsoft.com/en-us/library/dd587263%28v=office.11%29.aspx

手工能改吗?具体步骤是什么?
Justin-Liu 2011-03-15
  • 打赏
  • 举报
回复
folder特殊,可以不算作listitem,就和explore里面的folder一样
xrongzhen 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 forum2621 的回复:]
你不能给folder对象赋值的,你把item.name取出来看看你是不是取得时folder对象
[/Quote]

为什么不能给Folder赋值啊 Folder也对应ListItem啊。我现在需要的就是给Folder对应Item的栏赋值
xrongzhen 2011-03-14
  • 打赏
  • 举报
回复

using (SPWeb web = site.OpenWeb(""))
{

SPList list = web.Lists["类型列表"];
web.AllowUnsafeUpdates = true;
foreach(SPFolder folder in list.RootFolder.SubFolders)
{
if(folder.Name == "文件名称")
{
SPListItem item = folder.Item;

SPFieldLookup lookup = (SPFieldLookup)list.Fields["类型"];
if(lookup !=null)
{
//都不成功 直接"1;#文件夹"也不行
item["类型"] =new SPFieldLookupValue(1,"文件夹") ;
//item["类型"] =lookup.GetFieldValueAsText(new SPFieldLookupValue(1,"文件夹")) ;
item.Update();//会提示只读域 不允许更新类似的错误提示
}
}
}
web.AllowUnsafeUpdates = false;
}

forum2621 2011-03-14
  • 打赏
  • 举报
回复
这个就可以用

foreach (SPFile file in folder.Files)
{
Console.Write("\r\nfilename:" + file.Name);
SPListItem item = file.Item;
item["lll"]=new SPFieldLookupValue(2, "T2");
item.Update();
}
forum2621 2011-03-14
  • 打赏
  • 举报
回复
你不能给folder对象赋值的,你把item.name取出来看看你是不是取得时folder对象
xrongzhen 2011-03-14
  • 打赏
  • 举报
回复
被动啊,自己给自己顶了一贴被版主删除了 。。。

3,244

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 SharePoint
社区管理员
  • SharePoint社区
  • 霖雨 - LinyuLoveTJ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧