更新我已经解决了这个问题,但是将完成发布(在发布之前解决),希望它可以帮助其他人。
问题:从列表框中引用和操作列表项要求列表框的列表项都具有唯一的 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 语句以编程方式添加它们,则网页中的手动选择与所选项目无关,它始终为 0,单击页面上的任何按钮,回发将列表框返回到索引 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
我有一个在单独的 .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
需要明确的是,代码与静态条目完美配合。我创建了一个新页面并在那里重新创建了所有内容,并且我的体验与我的源页面相同。
编辑
修剪我的故障排除步骤,因为它们被证明与问题无关并且相当冗长。