эта проблема сводит меня действительно с ума.SqlDataSource связывает данные дважды :(
В Asp.Net-приложения, у меня есть два DropDownLists, DropDownStore и DropDownCampaign.
<asp:DropDownList ID="storeDropDown" AppendDataBoundItems="true"
AutoPostBack="true" DataSourceID="storeSqlDataSource"
DataTextField="Name" DataValueField="StoreId"
runat="server" OnSelectedIndexChanged="storeDropDown_SelectedIndexChanged">
<asp:ListItem Value="">Choose a store</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="campaignDropDown" DataSourceID="campaignSqlDataSource"
DataTextField="Name" DataValueField="CampaignLevelId"
AppendDataBoundItems="true" runat="server">
<asp:ListItem Value="">Choose a campaign</asp:ListItem>
</asp:DropDownList>
Как вы можете видеть, они оба связаны с SQLDataSources
SqlDataSource для второго DropDownList выглядит следующим образом:.
<asp:SqlDataSource ID="campaignSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:AFPMAdManagerConnectionString %>"
SelectCommand="SELECT [CampaignLevelId], [Name] FROM [CampaignLevel] where [StoreId] = @StoreId">
<SelectParameters>
<asp:ControlParameter ControlID="storeDropDown" Name="StoreId" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
, так что второй DropDownList привязан, когда пользователь выбирает запись первого DropDownList.
Это хорошо работает. Но когда я установил значение первого DropDownList программно, второй DropDownList связан дважды:
protected void Page_Load(object sender, EventArgs e)
{
storeDropDown.SelectedValue = "someStore";
}
Почему?
Не могли бы вы указать это? У меня нет значения, когда я первый запустил страницу. Но двойное связывание происходит даже тогда. – AGuyCalledGerald
@Jan: Поскольку ваш SqlDataSource привязан к ControlID, когда этот элемент управления загружается, его значение по умолчанию используется для привязки элемента управления SqlDataSource (он регистрируется как изменение, которое вызывает привязку). Затем, когда загружается SqlDataSource, он снова связывается. Я предпочитаю оставить SqlDataSources unbound до тех пор, пока я им не понадоблюсь. Затем я использую триггер события для изменения источника данных и controlid и т. Д. –