У меня есть ListBox, который динамически заполняется из базы данных в коде позади. У меня есть другая кнопка, и когда я нажимаю кнопку, событие нажатия кнопки получает все выбранные элементы списка и вставляет текст элемента списка в базу данных. Я установил AutoPostBack как false, а EnableViewState имеет значение true в свойстве списка
Проблема в том, что когда я нажимаю кнопку, он видит только 1 выбранный элемент, даже если я выбираю несколько элементов. Вот коды. Я ценю вашу помощь. Я трачу 1 день на эту проблему и никуда не денусь.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
loadrdlist();
}
}
protected void loadrdlist()
{
((ListBox)TestFormView.FindControl("ListBoxB")).Items.Clear();
foreach (FailureTempRD rd in FailureTempRD.SelectFailureTempRD())
((ListBox)TestFormView.FindControl("ListBoxB")).Items.Add(new ListItem(rd.ReferenceDesignator, rd.ReferenceDesignator));
}
protected void btn_AddRD_Click(object sender, EventArgs e)
{
foreach (ListItem rd in ((ListBox)TestFormView.FindControl("ListBoxB")).Items) //This is where it only see 1 selected item
{
if (rd.Selected == true)
//put selected item to database
}
}
}
Здесь есть и список, и кнопка
<asp:ListBox ID="ListBoxB" runat="server" SelectionMode="Multiple" ></asp:ListBox>
<asp:Button ID="btn_AddRD" runat="server" CausesValidation="False" onclick= "btn_AddRD_Click" Text="Add" />
Обновление:
Я понимаю, почему. Когда я загружаю список элементов, мне нужно добавить идентификатор в качестве значения элемента списка. Поэтому измените следующий код. Я тестирую несколько раз, и это работает как намерение.
((ListBox)TestFormView.FindControl("ListBoxB")).Items.Add(new ListItem(rd.ReferenceDesignator, rd.ReferenceDesignator));
К
((ListBox)TestFormView.FindControl("ListBoxB")).Items.Add(new ListItem(rd.ReferenceDesignator, rd.ID));