2015-04-20 2 views
0

У меня есть канал JSon со следующей группой данных:нагрузки вложенной повторяющаяся, если соответствует значению - C#

["policy#:1111", "id:1", "name:abc"], 
["policy#:1111", "id:2", "name:def"], 
["policy#:2222", "id:3", "name:ghi"], 
["policy#:2222", "id:4", "name:jkl"] 

Я хочу, чтобы сгруппировать записи на основе «политика #». так что данные должен отображаться в ретрансляторе, как это:

политика #: 1111

ID: 1, имя: а

ID: 2, Имя: Защита

политика #: 2222

ID: 3, Имя: ГХИ

если: 4, Имя: JKL

Для этого я использую следующий код, но я могу легко использовать политик # на первом повторителе, но я не могу отображать остальную информацию на основе политики # в вложенном повторителе. Пожалуйста, помогите

ASCX:

<asp:Repeater ID="rptDocument" runat="server" OnItemDataBound="repMenu1_ItemDataBound"> 
<HeaderTemplate> 
    <ul id="getDocuments"> 
</HeaderTemplate> 
<FooterTemplate></ul></FooterTemplate> 
<ItemTemplate> 
    <li class='parent'><%# Eval("Policynum") %></li> 
    <asp:Repeater runat="server" ID="sub_repeater"> 
     <HeaderTemplate> 
      <ul id="getDocuments"> 
     </HeaderTemplate> 
     <FooterTemplate></ul></FooterTemplate> 
     <ItemTemplate> 
      <li class='child'><%# Eval("Id") %>'</li> 
      <li class='child'><%# Eval("Name") %></li> 
     </ItemTemplate> 
    </asp:Repeater> 
</ItemTemplate> 

ASCX.CS (Для того, чтобы связать данные в гнездовой ретранслятора, если политика # соответствует) Здесь я получаю вопросы, населяющие данные в гнездовой повторителя

protected void repMenu1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { 
     Repeater rptSub = (Repeater)e.Item.FindControl("sub_repeater"); 
     string searchExpression = "Policynum = '" + DataBinder.Eval((e.Item).DataItem, "Policynum") + "'"; 
     DataTable dt2 = buildData().Select(searchExpression).CopyToDataTable(); 
     rptSub.DataSource = buildData(); 
     rptSub.DataBind(); 
    } 
} 

После выполнения приведенного выше кода, я получаю результат следующим образом:

политики #: 1111

ID: 1, имя: а

ID: 2, Имя: Защита

ID: 3, Имя: ГХИ

ID: 4, Имя: JKL

политики #: 2222

ответ

0

Обратите внимание на код:

DataTable dt2 = buildData().Select(searchExpression).CopyToDataTable(); 
rptSub.DataSource = buildData(); 
rptSub.DataBind(); 

Вторая строка может быть rptSub.DataSource = dt2;.

+0

Спасибо. Я не знаю, как я пропустил его, но теперь, когда я вижу результат, он показывает этот результат: Политика №: 1111 id: 1, имя: abc id: 2, имя: def Политика № 2 – makhan

+0

Все права защищены. , Согласно вашему коду, возможно, вы хотите «выбрать» некоторые данные из результата метода 'buildData()' и 'CopyToDataTable()' dt2. Поэтому я думаю, что источник данных 'rptSub' должен связываться с' DataTable' dt2, а не с исходным методом 'buildData()'. – vxchin

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