2009-04-24 3 views
0

У меня есть listview, где я устанавливаю источник данных в код-позади - это прекрасно работает. Когда я добавляю еще один элемент списка (или элемент управления привязкой данных) к элементу itemview шаблона listview и устанавливаю источник данных для этого элемента управления в коде, поля, возвращаемые запросом, кажутся недоступными для вложенного списка; ASP.NET вызывает следующую ошибку: DataBinding: «System.String» не содержит свойства с именем «j_Name».Вложенные данные привязки listview - свойство не найдено?

В приведенном ниже примере 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 внешнего ListView, и я по-прежнему сталкивается с та же ошибка. Предположительно, я не понимаю инструктора?

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(); 
    } 
} 

EDIT: 2 После прочтения вокруг сети еще немного (теперь, когда у меня есть представление о том, что искать) предлагаемый ответ кажется правильным - однако, это не работает - кто может предложить Зачем?

EDIT: 3 Если я канава вывода данных из j_Name, и просто жёстко прописанная строка, нет никакой ошибки, и жёстко строки выводит данные ожидаемого числа раз. Это означало бы, что это просто имя столбца (j_Name) неверно, хотя я вижу, как набор данных возвращается из запроса с таким именем столбца.

EDIT: 4 Исправлено. Это неправильно var qry2 = from q in context.Roles select q.j_Role; Это правильно var qry2 = from q in context.Roles select q;

ответ

2

Вы должны связать внутренний список на каждой строке внешнего списка в ItemDataBoundEvent для внешнего списка.

Так этот код:

var qry2 = from q in context.Roles select q.j_Role; 
LV2.DataSource = qualificationQry; 
LV2.DataBind(); 

нужно будет идти в четном обработчик для внешних списков ItemDataBound событие:

protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
    // Bind the inner list on every repeat of the outer list 
    var qry2 = from q in context.Roles select q.j_Role; 
    LV2.DataSource = qualificationQry; 
    LV2.DataBind(); 
    } 
} 

И предположительно вы хотите, чтобы фильтровать значения для внутреннего список на основе значения из текущего элемента внешнего списка

+0

Спасибо, но можете ли вы быть более конкретным? – user9659

+0

, отредактированный, если быть более конкретным - есть ссылка на документы msdn для ItemDataBound там тоже, если вам нужно больше информации –

+0

См. Мое редактирование на исходный вопрос. Я сделал то, что вы предложили, и я все еще сталкиваюсь с той же ошибкой (Я вижу, что вызываемое событие и данные, возвращаемые из базы данных, там, я все равно получаю ошибку свойства system.string). – user9659

Смежные вопросы