Как очистить существующие элементы dropdownlist при изменении его содержимого?
ddl2 заполняется на основе выбранного значения ddl1 успешно.
моя проблема заключается в том, что данные, которые уже присутствуют в ddl2, не очищаются перед добавлением новых данных, поэтому содержимое ddl2 просто продолжает расти каждый раз, когда ddl1 изменяется.
<asp:DropDownList ID="ddl1" RunAt="Server" DataSourceID="sql1" DataValueField="ID1" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True">
<asp:ListItem Text="ALL" Selected="True" Value="0"/>
</asp:DropDownList>
<asp:DropDownList ID="ddl2" RunAt="Server" DataSourceID="sql2" DataValueField="ID2" DataTextField="Name2" AppendDataBoundItems="True" AutoPostBack="True">
<asp:ListItem Text="ALL" Selected="True" Value="0"/>
</asp:DropDownList>
<asp:SqlDataSource ID="sql1" RunAt="Server" SelectCommand="sp1" SelectCommandType="StoredProcedure"/>
<asp:SqlDataSource ID="sql2" RunAt="Server" SelectCommand="sp2" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter Type="Int32" Name="ID1" ControlID="ddl1" PropertyName="SelectedValue"/>
</SelectParameters>
</asp:SqlDataSource>
Я попытался повторно привязать данные в коде позади выбранного изменения индекса, а также элементов.ясно с небольшим успехом.
Protected Sub ddl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
ddl2.Items.Clear()
ddl2.DataSource = sql2
ddl2.DataBind()
End Sub
вопрос
Как получить предметы в asp: dropdownlist для очистки перед заполнением новых значений, когда содержимое dropdownlists зависит от другого выбранного значения dropdownlists?
пожалуйста, разместите любой код в VB
5 ответов
используя ddl.Items.Clear()
очистит выпадающий список, однако вы должны быть уверены, что ваш выпадающий список не установлено:
AppendDataBoundItems="True"
эта опция вызовет данные отскока, которые будут добавлены к существующему списку, который будет не быть очищены до привязки.
решение
добавить AppendDataBoundItems="False"
в свой dropdownlist для.
теперь когда данные отскок он автоматически очистит все существующие данные заранее.
Protected Sub ddl1_SelectedIndexChanged(sender As Object, e As EventArgs)
ddl2.DataSource = sql2
ddl2.DataBind()
End Sub
Примечание: это может не подходить во всех ситуациях, поскольку элементы appenddatbound могут привести к тому, что ваш выпадающий список добавит свои собственные данные при каждом изменении списка.
ПОЛЕЗНЫЙ СОВЕТ
по-прежнему хотите, чтобы элемент списка по умолчанию добавлялся в раскрывающийся список, но вам нужно перезапустить данные?
использовать AppendDataBoundItems="False"
чтобы предотвратить дублирование данных при обратной передаче, а затем непосредственно после привязки dropdownlist вставьте новый элемент списка по умолчанию.
ddl.Items.Insert(0, New ListItem("Select ...", ""))
вы должны очистить свой listbbox перед привязкой:
Me.ddl2.Items.Clear()
' now set datasource and bind
всего 2 простых шага, чтобы решить вашу проблему
прежде всего проверьте свойство AppendDataBoundItems и назначьте ему false
во-вторых, очистите все элементы, используя свойство .clear ()
{
ddl1.Items.Clear();
ddl1.datasource = sql1;
ddl1.DataBind();
}
просто скомпилировал ваш код, и единственное, что отсутствует в нем, это то, что вы должны привязать свой ddl2 к пустому источнику данных, прежде чем привязывать его снова следующим образом:
защищенный Sub ddl1_SelectedIndexChanged(отправитель ByVal как объект, ByVal е как EventArgs в) //ddl2.Предметы.Clear ()
ddl2.DataSource=New List(Of String)() ddl2.DataSource = sql2 ddl2.DataBind() End Sub
и это сработало просто отлично