У меня есть DataGrid (назначение) с CountryId колонком, это переплетено в DropDownList, чтобы просмотреть страны. У меня есть страны и countryGroups таблицы тоже, где countries.countryGroupId = countryGroups.countryGroupId. Список должен быть отформатирован поэтому я использую SqlDataSource, чтобы получить форматированный список:Заменить SqlDataSource с EntityDataSource
SELECT c.countryID, cg.countryGroupName+': '+c.CountryName as Name
FROM countries AS c INNER JOIN
countries_groups AS cg ON c.countryGroupID = cg.countryGroupID
ORDER BY cg.Sort, c.CountryName
вот DropDownList изначально переплетен в SqlDataSource:
<asp:DropDownList ID="ddlCountryID" runat="server" Width="160px" DataSourceID="dsCountries"
AppendDataBoundItems="true" DataTextField="Name" DataValueField="countryID"
SelectedValue='<%# Bind("countryID") %>'>
<asp:ListItem Value="" Text="Select"></asp:ListItem>
</asp:DropDownList>
Я хотел бы заменить SqlDataSource на EntityDataSource для страны поле. Я создал следующий ProductionModel
VS2010 был создан разделяемым классу публичной ProductionEntities: ObjectContext ...
Я создал EntityDataSource:
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=ProductionEntities"
DefaultContainerName="ProductionEntities" EntitySetName="countries"
Include=""
onquerycreated="EntityDataSource1_QueryCreated"
ContextTypeName="ASPWebApp.Datasource.ProductionEntities">
Мой вопрос, Какие еще шаги необходимы для окончательного связывания с EntityDataSource?
Заранее благодарим!
UPDATE: Решение стало быть следующим (благодаря @Gaurav Jain)
protected void ddlCountryID_OnInit(object sender, EventArgs e) {
DropDownList ddlCountryID = sender as DropDownList;
ddlCountryID.DataSource = (from c in db.suppliers_countries
join cg in db.suppliers_countries_groups on c.countryGroupID equals cg.countryGroupID
orderby cg.Sort, c.CountryName
select new {
c.countryID,
Name = cg.countryGroupName + ": " + c.CountryName
});
}
и DropDownList стал быть:
<asp:DropDownList ID="ddlCountryID" runat="server" Width="160px" AppendDataBoundItems="true"
SelectedValue='<%# Bind("countryID") %>' **OnInit="ddlCountryID_OnInit"**
DataTextField="Name" DataValueField="countryID">
<asp:ListItem Value="" Text="Select"></asp:ListItem>
</asp:DropDownList>
Похоже, все сделано (только я не вижу строку подключения в web.config). Для повышения производительности я могу посоветовать использовать хранимую процедуру вместо запроса Sql. –
Обязательно ли использовать веб-формы? Почему бы вам не использовать html select с помощью Knockjout.Js + WebApi? –
Нет, это еще не все. Он пропускает JOIN от entitydatasource, между странами и странами_группами. Это основная незавершенность. Да, обязательным является использование веб-форм. Я хотел бы иметь бизнес-логику на стороне сервера вместо javascript. – Franziee