2012-04-23 4 views
0

SharePoint SPListItemListItemに変換してドロップダウンリストに入れようとしています。 #Daylight;#SharePoint SPListItemをドロップダウンリストアイテムに変換する

; #Design; #Employee婚約;#

しかし、明らかにこれはない

:私の問題は、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); 
       } 
      } 
     } 

答えて

2

SPFieldLookupValueCollectionを試してみてください。

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); 
    } 
} 

注意を、あなたはSharePoint 2007の指定されたので、それは、.NET Frameworkの3.5が必要ですので、私はLINQの使用を避けています。また、それぞれのリスト項目に別々のトピックが含まれていれば、あなたは大丈夫です。しかし、トピックをリストアイテム間で繰り返すことができる場合は、TopicDropDownListに別個のトピックが含まれるようにこのコードを変更することをお勧めします。

0

LINQそれ、(擬似コード)のようなもの

... 
var ddlItems = (from i in items 
      select i["Topic"]).Distinct(); 
TopicDropDownList.Items.AddRange(ddlItems); 
... 
0

トピックあなたは;#によってフィールドの値を分割することができます複数選択フィールドの場合:

var listItems = items.Cast<SPListItem>() 
    .SelectMany(i => Convert.ToString(i["Topic"]).Split(";#", StringSplitOptions.RemoveEmptyEntries)) 
    .Distinct(); 

TopicDropDownList.Items.AddRange(listItems); 

することができますoList.GetItems(query)によって返されたSPListItemCollectionで直接動作します。 DataTableに変換する必要はありません。

トピックフィールドをViewFieldとすることをお勧めします。

フィールド値を手動で分割しない場合は、SPFieldMultiChoiceValue classを使用できます。残念ながら、このクラスの選択肢にアクセスする便利な方法はありません。カウントとインデクサだけがあるので、for-loopを使用する必要があります。代わりのDataTableの