2014-04-07 33 views
2

我試圖從複選框列表中將所選項目添加到按鈕單擊列表框中。我可以通過使用以下來實現:從字符串列表中添加和刪除項目,只有在項目不存在的情況下才會添加

protected void AddSelectedField(object sender, EventArgs e) 
{ 
    foreach (ListItem column in ColumnsList.Items) 
    { 
     if (column.Selected) 
     { 
      SelectedColumns.Add(column.Text); 
     } 
    } 

    foreach (String column in SelectedColumns) 
    { 
     SelectedFieldsList.Items.Add(column); 
    } 
} 

然而,與此有關的問題是,用戶仍然可以添加同一項目的回傳後發生,他們已經選定。我試過以下,但這並不甚至添加所選項目到ListBox了:

protected void AddSelectedField(object sender, EventArgs e) 
{ 
    foreach (ListItem column in ColumnsList.Items) 
    { 
     if (column.Selected) 
     { 
      foreach (String item in SelectedColumns) 
      { 
       if (item != column.Text || SelectedColumns != null) 
       { 
        SelectedColumns.Add(column.Text); 
       } 
      } 
     } 
    } 

    foreach (String column in SelectedColumns) 
    { 
     SelectedFieldsList.Items.Add(column); 
    } 
} 

另外,我還需要添加功能,允許用戶通過該循環,以從列表中刪除項目列表框中的選定項目。我已經試過這樣:

protected void RemoveSelectedField(object sender, EventArgs e) 
{ 
    foreach (ListItem field in SelectedFieldsList.Items) 
    { 
     if (field.Selected) 
     { 
      SelectedColumns.Remove(item); 
     } 
    } 

    foreach (String field in SelectedColumns) 
    { 
     SelectedFieldsList.Items.Add(field); 
    } 
} 

除了:

protected void RemoveSelectedField(object sender, EventArgs e) 
{ 
    foreach (ListItem field in SelectedFieldsList.Items) 
    { 
     if (field.Selected) 
     { 
      foreach (String item in SelectedColumns) 
      { 
       if (item == field.Text) 
       { 
        SelectedColumns.Remove(item); 
       } 
      } 
     } 
    } 

    foreach (String field in SelectedColumns) 
    { 
     SelectedFieldsList.Items.Add(field); 
    } 
} 

這些都不刪除從列表框中米選定的項目(和我假設的字符串列表以及)。在問候檢查,看看是否存在我也試過正在已添加的項:

protected void AddSelectedField(object sender, EventArgs e) 
{ 
    foreach (ListItem column in ColumnsList.Items) 
    { 
     if (column.Selected && !SelectedColumns.Contains(column.Text)) 
     { 
      SelectedColumns.Add(column.Text); 
     } 
    } 

    foreach (String column in SelectedColumns) 
    { 
     SelectedFieldsList.Items.Add(column); 
    } 
} 

而且就好像它忽略if語句的第二部分是檢查是否列表包含當前列出項目的文本。

+0

您是否試過[HashSet](http://msdn.microsoft.com/zh-cn/library/bb359438.aspx)而不是List?這是一個不允許重複的數據結構。 –

+0

剛剛嘗試過,它也做同樣的事情。我認爲它再次添加它的事實可能是由於方法底部的foreach,它將項目添加到SelectedFieldsList(列表框控件)。 –

+0

@TonyBarsotti嗯,看着你最後的方法'保護無效AddSelectedField(對象發件人,EventArgs e)'似乎應該做你想做的 - 只添加不存在的列。你能展示你如何聲明'SelectedColumns'? – Leron

回答

0

如果SelectedColumns是一個List爲什麼不使用Contains()方法?

if (column.Selected && !SelectedColumns.Contains(column.Text)) 
    { 
     SelectedColumns.Add(column.Text); 
    } 
+0

看看他的帖子結尾,最後的方法是準確的。他正在這樣做! – Leron

+0

@Leron很好趕上!謝謝!我剛剛檢查了幾個頂級方法。 –

0

的新功能有很大的禁忌......

無法遍歷List,同時還改變該列表:

 foreach (String item in SelectedColumns) 
     { 
      if (item == field.Text) 
      { 
       SelectedColumns.Remove(item); 
      } 
     } 

和...

 foreach (String item in SelectedColumns) 
     { 
      if (item != column.Text || SelectedColumns != null) 
       SelectedColumns.Add(item.text); 
     } 

這樣做應該會導致一個異常,這讓我認爲代碼甚至沒有被調用。

此外,對於第二個代碼snippit,我認爲SelectedColumns!= null可能不是你的意思,因爲如果它是空的,你不會迭代它。

最後,您可以使用var而不是String/ListItem並調試以查看實際迭代的對象類型。

相關問題