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

コレクション内の各アイテムの値を取得するにはどうすればよいですか?

4

4 に答える 4

5

itemListItemオブジェクトです。呼び出すのではなく、 プロパティとプロパティをToString使用して必要な情報を取得する必要があります。TextValue

于 2010-01-11T14:15:58.310 に答える
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)
于 2012-04-10T13:55:48.483 に答える
0

やってみました:

item.Value
于 2010-01-11T14:17:55.007 に答える
0

基になるコレクションを変更する可能性があるため、ListBox を反復処理するときは注意が必要です。foreach をそのまま使用することで、基礎となる列挙子を利用しています。イテレータを次のように変更することをお勧めします (C# の例)。

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

これを行うと、リストのコレクションではなく、配列のコレクションが変更されます。これは反対することを前提とLINQしており、場合によってはそれを機能させるために呼び出す必要があるかもしれませんCast<t>

その理由は以下です。

foreach ステートメントは、配列またはオブジェクト コレクション内の各要素に対して一連の埋め込みステートメントを繰り返します。foreach ステートメントは、コレクションを反復処理して必要な情報を取得するために使用されますが、予期しない副作用を避けるために、コレクションの内容を変更するために使用しないでください。

出典: MSDN

反復後に必要なテキストを取得するには、.Value代わりに を使用し.Textます。もちろん、インデックス付きの for ループで逆方向に実行するなど、反復する方法は他にもありますが、それは別のトピックです :)

于 2010-01-11T14:20:09.660 に答える