Как очистить существующие элементы 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

пожалуйста, используйте следующие

ddlCity.Items.Clear();

всего 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

и это сработало просто отлично