Обновить Я решил проблему, однако закончу публикацию (решено до публикации) в надежде, что это поможет кому-то еще.
Проблема. Для обращения к элементам списка из списка и управления ими требуется, чтобы все элементы списка списка имели уникальное значение 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 через код, его обработка неожиданна. Сначала он знает выбранный элемент, но в какой-то момент обработки ссылочного элемента списка он начинает ссылаться на него через значение, после чего возвращаемый текст или индекс будут «улица» или «0». Я понимаю, что как только вы начинаете извлекать элементы из списка, он извлекает свое первое совпадение.
начать исходное сообщение
Хорошо, проект - это проект веб-форм vb.net. У меня есть 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" />
Это имеет следующее событие click:
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
Просто для ясности: код безупречно работает со статическими записями. Я создал новую страницу и воссоздал все там, и у меня такой же опыт, как и у моей исходной страницы.
Изменить
Сокращение моих шагов по устранению неполадок, поскольку они не имеют отношения к проблеме и были довольно длинными.