2012-08-13 58 views
1

考慮以下代碼:選擇添加值的字符串

foreach (ListItem item in lstViolations.Items) 
{ 
    if (item.Selected) 
    { 
     messageBody += item.Value + Environment.NewLine; 
    } 
} 

我試圖通過每個ListItemlstViolations進行迭代。但是,只有第一個選定的值被添加到messageBody,我無法弄清楚原因。

此外,添加messageBody += "test"只打印第一個清單項目,然後打印test

+3

您是否在列表框中啓用了多項選擇? 'SelectionMode = Multiple「' – Icarus 2012-08-13 19:10:20

+0

跟蹤它,測試是否不止一次返回true? – 2012-08-13 19:10:32

+2

......感謝伊卡洛斯,它已經是一個長日了 – Geekender 2012-08-13 19:11:24

回答

2

試試這個: 如果它是一個ListView,然後:

foreach(ListViewItem Item in lstViolations.SelectedItems) 
     messageBody+= Item.Text + Environment.NewLine; 

如果它是一個列表框,然後:

foreach(string Item in lstViolations.SelectedItems) 
     messageBody+= Item + Environment.NewLine; 

這會遍歷只能通過選定的項目。

編輯:沒有看過標籤。這不適用於ASP.NET!

+0

似乎並不是一個有效的選項 – Geekender 2012-08-13 19:15:21

+0

沒有'SelectedItems'屬性(-1)。 – 2012-08-13 19:15:33

+0

你可能想看到這個:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selecteditems .aspx和http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selecteditems.aspx 如果您使用任一列表,上述可能會工作。 – DelegateX 2012-08-13 19:20:07

0

甚至更​​乾淨,更容易。

messageBody = string.Join(Environment.NewLine, lstViolations.SelectedItems); 
+0

同樣在這裏,ASP.NET中不存在這樣的事情。 – 2012-08-13 19:57:08

+0

ok .. messageBody = string.Join(Environment.NewLine,lstViolations.Items.Where(i => i.Selected).Select(i => i.Value)) – 2012-08-13 20:00:20