使用重复数据进行自定义用户控制

时间:2016-12-22 11:07:08

标签: c# asp.net repeat webusercontrol

以下是我瞄准的代码。我需要一个可以绑定数据的自定义用户控件,但也包含其他内容(因此只需一个原始转发器就不够了)。最终目标是:

<MyControls:Control1 runat="server" id="Control1">
    <headertemplate>
        <tr>
            <td>ID</td>
            <td>Username</td>
        </tr>
    </headertemplate>
    <itemtemplate>
        <tr>
            <td><%#((User)Container.DataItem).ID %></td>
            <td><%#((User)Container.DataItem).Username %></td>
        </tr>
    </itemtemplate>
</MyControls>

var users = GetUsersList();
Control1.DataSource = users;
Control1.DataBind();

看起来像这样:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl1.ascx.cs" Inherits="Controls.MyControl1" %>

<asp:PlaceHolder runat="server" ID="Wrapper">

    <h2>Results</h2>

    <table>
        <%=HeaderTemplate%>
        <%
            if(ItemTemplate.AnyItems()){
                foreach(var item in ItemTemplate){

                }
            }
            else
            {
            %>Nothing here<%
            }
        %>
    </table>
    <MyControls:AnotherControl runat="server" />

</asp:PlaceHolder>

我在ScottGu的博客上找到了一个显示我想要的内容的页面:
https://weblogs.asp.net/scottgu/Supporting-Templates-with-ASP.NET-User-Controls

但现在链接到404教程!我发现的所有其他例子似乎写得不好,很难分开。

非常感谢任何有关如何实现上述目标的帮助。

1 个答案:

答案 0 :(得分:1)

看起来你正在混淆2个不同的控件。 UserControlRepeater(我认为)。

要将数据绑定到UserControl中的Control,您需要从父级访问该Control。您可以通过在UserControl中创建公共属性来完成此操作。

public Repeater myRepeater
{
    get
    {
        return Repeater1;
    }
    set
    {
        Repeater1 = value;
    }
}

UserControl ascx与Repeater Control

<table border="1">
    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <tr>
                <td>ID</td>
                <td>Username</td>
            </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("ID") %></td>
                <td><%# Eval("Username") %></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
</table>
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

现在,由于公共属性,您可以访问父级中的Repeater1

Control1.myRepeater.DataSource = users;
Control1.myRepeater.DataBind();

将aspx父控件上的控件保留为空。

<MyControls:Control1 runat="server" id="Control1"></MyControls>