C# 将SharePoint SPListItem转换为下拉列表项
我正在尝试将SharePointC# 将SharePoint SPListItem转换为下拉列表项,c#,asp.net,sharepoint-2007,sharepoint-list,C#,Asp.net,Sharepoint 2007,Sharepoint List,我正在尝试将SharePointSPListItem转换为ListItem以放入下拉列表。我的问题是SharePoint列表中的数据存储方式如下: )#日光# )#设计#员工敬业度# 但显然,这对我不起作用。我需要取下这个;#应该像String.Replace那样简单的符号,但是我遇到一些问题的地方是我应该如何处理包含多个选择的列表项(我上面的第二个示例)。这里的最终目标是生成SharePoint列表中所有项目的下拉列表(不包含重复项)。有什么想法吗 using (SPSite
SPListItem
转换为ListItem
以放入下拉列表。我的问题是SharePoint列表中的数据存储方式如下:
)#日光#
)#设计#员工敬业度#
但显然,这对我不起作用。我需要取下这个;#应该像String.Replace那样简单的符号,但是我遇到一些问题的地方是我应该如何处理包含多个选择的列表项(我上面的第二个示例)。这里的最终目标是生成SharePoint列表中所有项目的下拉列表(不包含重复项)。有什么想法吗
using (SPSite site = new SPSite(SPContext.Current.Web.Url.ToString()))
using (SPWeb oWebsiteRoot = site.OpenWeb())
{
SPList oList = oWebsiteRoot.Lists["WplData"];
SPListItemCollection items = null;
SPQuery query = new SPQuery();
query.Query = "<Where><IsNotNull><FieldRef Name='Topic' /></IsNotNull>" +
"</Where><OrderBy><FieldRef Name='Topic' Ascending='True' /></OrderBy>";
items = oList.GetItems(query);
DataTable tmpTable = new System.Data.DataTable();
tmpTable = items.GetDataTable();
DataView view = new DataView(tmpTable);
String[] columns = { "Topic" };
DataTable table = view.ToTable(true, columns);
foreach (DataRow row in table.Rows)
{
foreach (var item in row.ItemArray)
{
ListItem listItem = new ListItem();
listItem.Value = item.ToString();
listItem.Text = item.ToString();
TopicDropDownList.Items.Add(listItem);
}
}
}
使用(SPSite site=newspsite(SPContext.Current.Web.Url.ToString())
使用(SPWeb oWebsiteRoot=site.OpenWeb())
{
SPList oList=oWebsiteRoot.Lists[“WplData”];
SPListItemCollection items=null;
SPQuery query=新建SPQuery();
query.query=“”+
"";
items=oList.GetItems(查询);
DataTable tmpTable=新的System.Data.DataTable();
tmpTable=items.GetDataTable();
数据视图=新数据视图(tmpTable);
字符串[]列={“主题”};
DataTable=view.ToTable(true,列);
foreach(table.Rows中的DataRow行)
{
foreach(row.ItemArray中的var项)
{
ListItem ListItem=新ListItem();
listItem.Value=item.ToString();
listItem.Text=item.ToString();
TopicDropDownList.Items.Add(列表项);
}
}
}
LINQ it,类似于(psuedocode)
如果主题是多选字段,则可以按拆分字段值#代码>:
var listItems=items.Cast()
.SelectMany(i=>Convert.ToString(i[“Topic”]).Split(“;#”,StringSplitOptions.RemoveEmptyEntries))
.Distinct();
TopicDropDownList.Items.AddRange(listItems);
您可以直接操作oList.GetItems(查询)
返回的SPListItemCollection
。您不需要在数据表中转换它
您可能会考虑将主题字段作为ViewField
包含在查询中
如果不想手动拆分字段值,可以使用。不幸的是,没有方便的方法来访问这个类中的选项。只有一个计数和一个索引器,因此您必须使用for循环。请尝试以下操作,而不是数据表:
SPList oList=oWebsiteRoot.Lists[“WplData”];
SPListItemCollection items=null;
SPQuery query=新建SPQuery();
query.query=“”+
"";
items=oList.GetItems(查询);
foreach(项目中的SPListItem项目)
{
SPFieldLookupValueCollection值=
新的SPFieldLookupValueCollection(项[“主题”].ToString());
foreach(SPFieldLookupValue值中的值)
{
ListItem ListItem=新ListItem();
listItem.Value=Value.LookupId.ToString();
listItem.Text=value.LookupValue;
TopicDropDownList.Items.Add(列表项);
}
}
注意,由于您指定了SharePoint 2007,因此我避免使用LINQ,因为这需要.NET Framework 3.5。此外,只要每个列表项都包含一组不同的主题,就可以了。但如果可以在列表项中重复主题,则需要修改此代码,以便TopicDropDownList
包含一组不同的主题
...
var ddlItems = (from i in items
select i["Topic"]).Distinct();
TopicDropDownList.Items.AddRange(ddlItems);
...
var listItems = items.Cast<SPListItem>()
.SelectMany(i => Convert.ToString(i["Topic"]).Split(";#", StringSplitOptions.RemoveEmptyEntries))
.Distinct();
TopicDropDownList.Items.AddRange(listItems);
SPList oList = oWebsiteRoot.Lists["WplData"];
SPListItemCollection items = null;
SPQuery query = new SPQuery();
query.Query = "<Where><IsNotNull><FieldRef Name='Topic' /></IsNotNull>" +
"</Where><OrderBy><FieldRef Name='Topic' Ascending='True' /></OrderBy>";
items = oList.GetItems(query);
foreach (SPListItem item in items)
{
SPFieldLookupValueCollection values =
new SPFieldLookupValueCollection(item["Topic"].ToString());
foreach (SPFieldLookupValue value in values)
{
ListItem listItem = new ListItem();
listItem.Value = value.LookupId.ToString();
listItem.Text = value.LookupValue;
TopicDropDownList.Items.Add(listItem);
}
}