2010-12-14 20 views
0

我有三組列表框,我將項目從lb1移動到lb2,從lb3移動到lb4和從lb5移動到lb6。左側的列表框包含相同的項目,我不希望用戶能夠提交頁面,如果左側列表框中的一個或多個項目被添加到右側的多個列表框中。例如,lb1,lb3和lb5中的項目A只能保存在lb2,lb4或lb6中,而不能保存在其中的兩個或三個中。如何檢查一個項目是否存在於多個列表框中? ASP.NET/C#

我想在提交頁面之前執行此檢查(稍後我將使用javascript添加驗證),我想知道最有效的方法是什麼。

將所有項目添加到列表中,並檢查是否有重複?

在此先感謝。

編輯: 是這樣的:

  List<string> groupList = new List<string>(); 
      foreach (ListItem item in lbFullAccess.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
      foreach (ListItem item in lbContributor.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
      foreach (ListItem item in lblReadOnly.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
+0

爲什麼只是不重複列表框並檢查?如何在提交時爲每個列表框使用DISTINCT? – Ostap 2010-12-14 05:34:45

回答

0

嗯,有一百種不同的方式,你可以做到這一點。你的迭代建議絕對沒有錯。

你可以有LINQ一點點的樂趣:

public bool AreAllValuesUnique() 
{ 
    // Build up a linq expression of all of the ListItems 
    // by concatenating each sequence 
    var allItems = lbFullAccess.Items.Cast<ListItem>() 
     .Concat(lbContributor.Items.Cast<ListItem>()) 
     .Concat(lbReadOnly.Items.Cast<ListItem>()); 

    // Group the previous linq expression by value (so they will be in groups of "A", "B", etc) 
    var groupedByValue = allItems.GroupBy(i => i.Value); 

    // Finally, return that all groups must have a count of only one element 
    // So each value can only appear once 
    return groupedByValue.All(g => g.Count() == 1); 
} 

不能確定有關調用演員(的ListItemCollection的每個元素轉換爲列表項,導致一個IEnumerable)對每個集合的性能,但它可能可以忽略不計。

相關問題