2010-01-11 35 views
2

我正在嘗試移動所有用戶添加到列表框的值,但是,我想要檢索列表框中每個項目的實際值,而不是文本。在循環播放時如何獲取列表框中的所有值?

我到目前爲止已經用下面的代碼得到,但只有得到文本,而不是價值。

For Each item In SelectedStoresLB.Items 
      Dim tCompany As Integer = CInt(Left(item.ToString, 1)) 
      Dim tStore As String = Right(item.ToString, 3) 
      Dim tReason As String = ReasonTxt.Text 
      insertSQL = "INSERT INTO [CommsDownLog] ([DimCompanyID],[PervasiveStoreNumber],[DownReason]) VALUES (" & tCompany & ", '" & tStore & "', '" & tReason & "')" 
      Dim insertRow = New SqlCommand(insertSQL, objConn) 
      Try 
       objConn.Open() 
       insertRow.ExecuteNonQuery() 
       objConn.Close() 
      Catch ex As Exception 
       Response.Write(ex) 
      End Try 
     Next 

我該如何去獲取集合中每個項目的值?

回答

5

itemListItem對象 - 而不是它的呼叫ToString,你應該使用TextValue屬性來獲取你所需要的信息。

0

你試過:

item.Value 
+0

這並沒有提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – devundef 2012-08-25 09:45:54

+0

嗯......你確定這不是一個正確的答案嗎?由於'item.Value'確實會得到值... – 2012-08-25 23:52:05

0

您遍歷一個列表框時需要小心,因爲你可能會修改底層集合。通過使用foreach,你正在使用底層的枚舉器。我建議你修改你的迭代以下(C#示例):

foreach (ListItem li in listbox.Items.ToArray()) 
{ 
    if (li.Selected) 
    { 
     Controltest2.Remove(li.Value); 
    } 
} 

通過這樣做,你是修改數組的集合而不是列表的集合。這假定LINQ反對,您可能需要撥打Cast<t>使其在某些情況下工作。

這樣做的原因是如下:

foreach語句重複用於在陣列中的每個元素 或對象集合 嵌入的語句組 。 foreach語句是 用於在集合 迭代,以獲得所需的信息,但 不應該被用來改變集合的 內容,以避免 不可預知的副作用

來源:MSDN

要在迭代後獲取所需文本,請使用.Value而不是.Text。當然,還有其他方法可以進行迭代,例如與循環索引相反,但這是另一個主題:)

1

使用VB 2010,請注意獲取需要使用的列表框中項目的實際值ListBoxItem對象的「Content」屬性。例如:

For i As Integer = 0 To lstSortUs.Items.Count - 1 
    sAllItems &= lstSortUs.Items(i).Content & ";" 
Next 
sAllItems = Left(sAllItems, Len(sAllItems) - 1) 
arrAllItems = sAllItems.Split(";") 
System.Array.Sort(arrAllItems)