0

我有一个简单的中继器,可以获取“小部件”的“组”主页列出了所有组:

<ItemTemplate>
    <tr>
        <td width="60" class="center"><%# DataBinder.Eval(Container.DataItem, "Number") %></td>
        <td><a href="Stories.aspx?ProjectID=<%# DataBinder.Eval(Container.DataItem, "ProjectId") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></a></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Description") %></td>
    </tr>
</ItemTemplate>

代码背后

private void LoadForm()
{
    using (MarketingWebContentEntities context = new MarketingWebContentEntities())
    {
        rptGroup.DataSource = (from groups in context.URLGroup
                               select groups).ToList();
        rptGroup.DataBind();
    }
}

我想在中继器中显示每个“组”中的“小部件”数量。我知道我需要在“小部件”表上运行查询以查看该列表中有多少项目。我只是不确定如何在转发器标记中添加它。

4

2 回答 2

2

如评论中所述,您可以为此使用 ItemDataBound 事件。

这个例子是用 VB 编写的——我写 C# 已经有一段时间了,不过会给你一个想法。我也没有检查它的语法,它更像是一个让你启动和运行的例子。

在您<ItemTemplate>添加自己时,比如说,一个ASP:Label. 在这种情况下,它被称为myLabel

因此,在您后面的代码中,创建一个处理ItemDataBound事件的私有方法。

Protected Sub myRepeater_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles myRepeater.ItemDataBound

    If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then

        Dim uG As URLGroup = CType(e.Item.DataItem, URLGroup)
        '' you now have the group for that one item
        '' you should now be able to get additional information needed.
        '' you can also get the myLabel from this item 
        dim lbl as Label = CType(e.Item.FindControl("myLabel", Label)
        '' and set its text to whatever you need
        lbl.Text = MyCounter

    End If

End Sub

希望这会让你上路。

这里也是它的MSDN文档的链接。

于 2012-11-07T20:40:24.000 回答
1

我使用了 OnItemDataBount 事件

<asp:Repeater runat="server" ID="rptGroup" OnItemDataBound="rptDestinationCount_ItemDataBound">
    <HeaderTemplate>
        <table id="tblUrlGroup" class="table table-bordered table-striped table-condensed">
            <thead>
                <tr>
                    <th>Name</th>
                    <th style="width:20px;">Count</th>
                    <th style="width:35px;">Add</th>
                </tr>
            </thead>
            <tbody>
    </HeaderTemplate>
    <ItemTemplate>
            <tr>
                <td><a href="ManageGroup.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "URLGroupRowID") %>"><i class="icon-wrench" rel="tooltip" title="Edit Group Name"></i></a> <a href="DestinationGroup.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "URLGroupRowID") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></a></td>
                <td class="center"><asp:HiddenField runat="server" ID="hidURLGroupRowID" Value='<%# DataBinder.Eval(Container.DataItem, "URLGroupRowID") %>' /><asp:Label runat="server" ID="lblCount"></asp:Label></td>
                <td class="center">                                
                    <a href="DestinationGroup.aspx?Id=<%# DataBinder.Eval(Container.DataItem, "URLGroupRowID") %>"><i class="icon-plus" rel="tooltip" title="Manage Destination URLs"></i></a>
                </td>
            </tr>
    </ItemTemplate>
    <FooterTemplate>
          </tbody>
        </table>
    </FooterTemplate>
</asp:Repeater>     

在功能上,我确保我只查看中继器项目和项目模板。隐藏字段使用数据源的 ID 设置。这允许我运行查询并将 lblCount.Text 设置为目标计数。

代码背后

protected void rptDestinationCount_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        using (MarketingWebContentEntities context = new MarketingWebContentEntities())
        {
            Label lblCount = (Label)e.Item.FindControl("lblCount");
            HiddenField hidURLGroupRowID = (HiddenField)e.Item.FindControl("hidURLGroupRowID");
            int groupRowID = Convert.ToInt32(hidURLGroupRowID.Value);

            var destination = (from dest in context.URLDestination
                               where dest.URLGroup.URLGroupRowID == groupRowID
                               select dest).ToList();

            lblCount.Text = destination.Count.ToString();


        }
    }
}
于 2012-11-12T15:50:08.637 回答