1

更新私は問題を解決しましたが、他の人の助けになることを期待して、これの投稿を終了します (投稿前に解決されます)。

問題: リストボックスからリストアイテムを参照および操作するには、リストボックスのリストアイテムすべてに固有の listbox.value が必要です。私の場合、リストボックスの値としてテーブル名を割り当て、listbox.text として列名を割り当てていました (SQL テーブルから選択するフィールドのリストをユーザーに与えていました)。したがって、以下を含むリストボックス:

Index 0: Text:street Value:"dbo.incident"
Index 1: Text:city Value:"dbo.incident" 
Index 2: Text:state Value:"dbo.incident" Selected

そして、コードを介して textbox1.selected アイテムを参照すると、その処理は予想外です。選択されたアイテムを知ることから始まりますが、参照されたリストアイテムの処理のある時点で、値を介して参照を開始し、その時点で返されるテキストまたはインデックスは「street」または「0」になります。リストボックスからアイテムを取得し始めると、最初の一致が取得されることを理解しています。

元の投稿を開始

わかりましたプロジェクトはvb .net Webフォームプロジェクトです.2つのリストボックスがあり、エントリを入力して上下に移動します。これを行う方法は理解していますが、発生しているこの奇妙な誤った動作を克服できないようです。

このように手動でアイテムを追加すると、正常に機能し、リストアイテムがリストボックス間で転送され、期待どおりにインデックスを変更できます。(この投稿では、静的として作成されたエントリを参照します)

ListBox1.Items.Add(New ListItem("1", "1"))
...through...
ListBox1.Items.Add(New ListItem("10", "10"))

ただし、linq ステートメントからプログラムでそれらを追加すると、Web ページでの手動選択は、選択されたアイテムとは無関係です。ページ上の任意のボタンをクリックすると、ポストバックはリストボックスをインデックス 0 に返します。この方法で作成されたエントリは動的として参照されます)

    Dim db As New MSCRMDataContext
    Dim datamodel = db.Mapping
    For Each r In datamodel.GetTables
        If r.TableName = "dbo.IncidentFull" Then
            For Each r1 In r.RowType.DataMembers
                ListBox1.Items.Add(New ListItem(r1.MappedName, r.TableName))

            Next
        End If
    Next

aspx ボタンがあります。

<asp:Button ID="Button1" runat="server" Text="Button" />

次のクリック イベントがあります。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    mlbs_transferitem(ListBox1, ListBox2, ListBox1.SelectedItem)

End Sub

listitem を別の .vb ファイルに転送するサブがあります

Public Class multilistboxselector
Shared Sub mlbs_transferitem(srclb As ListBox, dstlb As ListBox, lbitem As ListItem, Optional sort As Boolean = False)
'checks if srclb had a selected listitem
If IsNothing(lbitem) Then
    Exit Sub
End If
'check for dupes
For Each li As ListItem In dstlb.Items
    If li.Text = lbitem.Text Then
        If li.Value = lbitem.Value Then
            Exit Sub
        End If
    End If
Next
'add lbitem to dst
dstlb.SelectedIndex = -1
dstlb.Items.Add(lbitem)
'remove lbitem from src
srclb.Items.Remove(lbitem)
'sort dst
If sort = True Then

End If
End Sub

明確にするために、コードは静的エントリで問題なく動作します。新しいページを作成し、そこにあるすべてを再作成しましたが、元のページと同じ経験があります。

編集

トラブルシューティングの手順は問題とは無関係であり、非常に長かったため、削除しました。

4

0 に答える 0