如果值匹配,则加载嵌套重复 - C#

时间:2015-04-20 17:39:39

标签: c# select expression repeater

我有一个带有以下数据组的json feed:

["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,姓名:abc

id:2,姓名:def

政策#:2222

id:3,姓名:ghi

if: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,名称:ABC

ID:2,名称:DEF

ID:3,名称:GHI

ID:4,名称:JKL

政策#:2222

1 个答案:

答案 0 :(得分:0)

注意你的代码:

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

第二行可能是rptSub.DataSource = dt2;