#c# #asp.net #drop-down-menu #detailsview
#c# #asp.net #выпадающее меню #detailsview
Вопрос:
У меня есть DetailsView
такой:
<asp:DetailsView ID="detailsView1" runat="server"
DataSourceID="edsdetailsView" AutoGenerateRows="False" CssClass="pretty-table">
<Fields>
<asp:TemplateField HeaderText="Cliente">
<ItemTemplate>
<asp:Label ID="dw1Label2" runat="server" Text='<%# Bind("Clienti.NomeSocieta") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlClienti" runat="server" SelectedValue='<%# Bind("IDCliente") %>'
Width="300" DataSourceID="EntityDataSourceClienti" DataTextField="NomeSocieta"
AutoPostBack="true" DataValueField='IDCliente'
onselectedindexchanged="ddlClienti_SelectedIndexChanged">
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="ddlClienti" runat="server" SelectedValue='<%# Bind("IDCliente") %>'
Width="300" DataSourceID="EntityDataSourceClienti" DataTextField="NomeSocieta"
AutoPostBack="true" DataValueField='IDCliente'
onselectedindexchanged="ddlClienti_SelectedIndexChanged">
</asp:DropDownList>
</InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Contatto" SortExpression="IDContatto">
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("Contatti.Nome") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlContatti" runat="server" SelectedValue='<%# Bind("IDContatto") %>'
Width="300px" DataSourceID="edsContatti" DataTextField="Nome"
DataValueField='IDContatto'>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="ddlContatti" runat="server" SelectedValue='<%# Bind("IDContatto") %>'
Width="300" DataSourceID="edsContatti" DataTextField="Nome"
DataValueField='IDContatto'/>
</InsertItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
в нем есть поле с именем, Cliente
подключенное к EntityDataSource
:
<asp:EntityDataSource ID="EntityDataSourceClienti" runat="server" ConnectionString="name=SalesPortalEntities"
DefaultContainerName="SalesPortalEntities" EnableFlattening="False" EntitySetName="Clienti"
OrderBy="it.NomeSocieta" EntityTypeFilter="Clienti">
</asp:EntityDataSource>
и я хотел бы изменить другое поле, Contatto
когда я изменяю выбор Cliente
поля. EntityDataSource
Для Contatto
является:
<asp:EntityDataSource ID="edsContatti" runat="server" ConnectionString="name=SalesPortalEntities"
DefaultContainerName="SalesPortalEntities" EnableFlattening="False" EntitySetName="Contatti"
Where="it.IDAzienda=@IDClienteFromDdl">
<WhereParameters>
<asp:Parameter Name="IDClienteFromDdl" Type="Int32"/>
</WhereParameters>
</asp:EntityDataSource>
Кроме того, для полноты картины это EntityDataSource
для DetailsView1
:
<asp:EntityDataSource ID="edsdetailsView" runat="server" Include="Categorie,Commerciali,Clienti,Contatti"
ConnectionString="name=SalesPortalEntities" OnInserting="UpdateDataSource" DefaultContainerName="SalesPortalEntities"
EnableDelete="True" EnableFlattening="False" EnableInsert="True" EnableUpdate="True"
EntitySetName="PianificazioneIncontri" Where="it.IDPianificazione = @IDPianificazione AND ((it.Obsoleto=false AND it.ApprovazioneModifica=false AND it.ApprovazioneEliminazione=false) OR (@GruppoAdmin='1' AND it.Obsoleto=false))"
OnUpdating="edsdetailsView_Updating">
<WhereParameters>
<asp:ControlParameter ControlID="GridView1" Name="IDPianificazione" PropertyName="SelectedValue" Type="Int32" />
<asp:Parameter Name="GruppoAdmin" Type="String" />
</WhereParameters>
</asp:EntityDataSource>
код, лежащий в основе:
protected void ddlClienti_SelectedIndexChanged(object sender, EventArgs e)
{
edsContatti.WhereParameters[0].DefaultValue = ((DropDownList)sender).SelectedValue;
}
Как мне подключить ddlContatti
к режимам вставки и редактирования ddlClienti
в DetailsView1
?
Ниже приведен снимок экрана с подробным представлением:
Заранее спасибо.
Ответ №1:
Еще одна попытка здесь, и тогда я перестану тратить ваше время, если это не сработает =)
protected void ddlClienti_SelectedIndexChanged(object sender, EventArgs e)
{
edsContatti.WhereParameters[0].DefaultValue = ((DropDownList)sender).SelectedValue;
// Call DataBind to reload the DataSource based on the new WHERE clause
edsContatti.DataBind();
// Since you're using a DetailsView, you have to find the nested control within it
DropDownList ddlContatti = (DropDownList)DetailsView1.FindControl("ddlConcatti");
// And then call DataBind on it as well
detailsView1.DataBind();
}
Комментарии:
1. @AlessandroG Упс, я забыл о ControlParameters. Это фактически обеспечивает функциональность, которую вы ищете, с очень небольшим количеством работы. Дайте мне знать, если это поможет!
2. это был мой первый код, но если я запущу страницу, появится эта ошибка: не удалось найти элемент управления ‘ddlClienti’ в параметре ControlParameter ‘IDClienteFromDdl’.
3. @AlessandroG Бах, я забыл, что ddl был внутри GridView. Я обновлю ответ, если вспомню что-то еще.
4. @AlessandroG Я предпринял еще одну попытку (поскольку решение сейчас не дает мне покоя, ха-ха).
5. Да, это работает, изменяя ddlContatti. DataBind() с detailsView1.DataBind(); вероятно, потому, что привязка к данным распространяется на Дочерние элементы. Спасибо Дж.