У меня есть просмотр списка, в котором я установил источник данных в коде - это отлично работает.
Когда я добавляю другое представление списка (или элемент управления с привязкой к данным) к шаблону элемента списка и устанавливаю источник данных для этого элемента управления в кодовой области, поля, возвращаемые запросом, кажутся недоступными для вложенного списка; ASP.NET выдает следующую ошибку: Привязка данных: «System.String» не содержит свойство с именем «j_Name».
В приведенном ниже примере d_Description работает нормально, тогда как j_Role выдает ошибку, указанную выше. Я вижу данные, возвращаемые запросом, и знаю, что имена столбцов совпадают, так что является причиной ошибки (и как ее устранить)?
Страница ASPX
<asp:ListView ID="LV1" runat="server">
<LayoutTemplate>
<table runat="server" id="tblSummary">
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("d_Description")%>
</td>
</tr>
<tr>
<td>
<asp:ListView ID="LV2" runat="server">
<ItemTemplate>
<%#Eval("j_Role")%>
</ItemTemplate>
<LayoutTemplate>
<asp:placeholder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
Код позади
var qry1 = from q in context.Descriptions select q.d_Description;
LV1.DataSource = qualificationQry;
LV1.DataBind();
var qry2 = from q in context.Roles select q.j_Role;
LV2.DataSource = qualificationQry;
LV2.DataBind();
EDIT:
Я добавил код, подобный приведенному ниже, в событие ItemDataBound внешнего списка, и все еще сталкиваюсь с той же ошибкой. Предположительно, я неправильно понимаю инструкцию?
protected void LV_ItemDataBound(object sender, ListViewItemEventArgs e)
{
using (dbDataContext context = new dbDataContext()
{
var qry2 = from q in context.Roles select q.j_Role;
ListView tempLV = (ListView)e.Item.FindControl("LV2");
tempLV.DataSource = qry2;
tempLV.DataBind();
}
}
РЕДАКТИРОВАТЬ: 2
После прочтения в Интернете еще (теперь, когда у меня есть представление о том, что искать) предложенный ответ кажется правильным - однако он не работает - может кто-нибудь подсказать почему?
РЕДАКТИРОВАТЬ: 3
Если я прерву вывод j_Name и просто получу жестко закодированную строку, ошибки не будет, и жестко закодированная строка выдаст ожидаемое количество раз. Это указывает на то, что это просто имя столбца (j_Name), которое неверно - хотя я вижу, что набор данных возвращается из запроса с таким точным именем столбца.
РЕДАКТИРОВАТЬ: 4
Починил это.
Это не верно
var qry2 = from q in context.Roles select q.j_Role;
Это правильно
var qry2 = from q in context.Roles select q;