今天尝试用代码往
SPList里追加一条数据,意外的碰到一个“非主流”的列(
URL型
SPField),应该说是小弟学艺未精,调查了毛一个小时还是不知道怎么输入。后来在前辈的指引下算是找到了方法。写下来加深记忆。
目标
SPListItem里有
一个自定义列
(
SPField),取了个名字叫“
URL”,选择的类型是“
ハイパーリンクまたは画像
”不知道中文应该怎么说,列的
SPFieldType应该是【
URL】。
这个列显示的是
URL的
Title,点击之后会链接到事先输入的
URL去。
普通往
SPListItem里追加数据非常简单,
参考
MSDN(
http://msdn.microsoft.com/en-us/library/ms470423.aspx
),摘录代码如下
SPSite oSiteCollection = SPContext.Current.Site;
SPList oListSrc = oSiteCollection.AllWebs["Destination_Site"].Lists["Destination_List"];
SPListItemCollection collListItemsDest = oListSrc.Items;
SPListItem oListDest = collListItemsDest.Add();
oListDest["Field1_Name"] = "Scenario 2";
oListDest["Field2_Name"] = 45;
oListDest["Field3_Name"] = "A sample note for this item.";
oListDest.Update();
但如果碰到
URL类型则要往一个
Field里面添加两条数据,这个东西不知道内部存储机制还真难下手。其实
sharepoint里很多数据之间都仅仅用很简单的符号来区分,像访问群体间就是用
“
;;
”
隔开,域用户间就用“
"n”隔开等等。而这里的两条数据之间,就是使用了“,
”(注意逗号后面有个单字节空格)来分隔。下面看代码吧
代码实现:
oListDest["URL"] = "<Title>, <URL>";
(具体还请参考上面的从
MSDN上剽窃来的代码吧~
^^)
追记: 感谢【bmy_light 】的热情回复~。上文所提及的输入方法可以用WSS3.0 SDK中的方法SPFieldUrlValue
来替代。
“超链接或图片”类型栏的值,对应的对象模型为SPFieldUrl和SPFieldUrlValue,可以这样读取:
SPFieldUrl fieldUrl = (SPFieldUrl)item.Fields["URL"];
SPFieldUrlValue value = (SPFieldUrlValue)fieldUrl.GetFieldValue(item["URL"].ToString()); Console.WriteLine(value.Description); Console.WriteLine(value.Url);
或者更简单的方法:
SPFieldUrlValue value = new SPFieldUrlValue(item["URL"].ToString());
Console.WriteLine(value.Description);
Console.WriteLine(value.Url);
设置
using (SPSite site = new SPSite("http://basesmcdev/sitedirectory/tester1"))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["mosstestchoices"];
SPListItem item = list.GetItemById(3);
SPFieldUrlValue spfv = new SPFieldUrlValue(item["myhyperlink"].ToString());
spfv.Url = "http://whatever.com";
spfv.Description = "new description";
item["myhyperlink"] = spfv.ToString();
item.Update();
}
}