如何添加动态数据绑定用户控件?

时间:2011-11-10 22:26:37

标签: c# asp.net

所以我有一个名为TagFilter的用户控件,它有2个中继器。 该控件将被添加到页面N次,每个转发器都绑定到不同的数据表。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TagFilter.ascx.cs" Inherits="Hite.Web.Controls.TagFilter" %>
<div class="tagDiv">
<h3>
    <span style="">Results By :</span>
    <asp:Repeater ID="rptUsed" runat="server">
        <ItemTemplate>
            <span class="UsedTags">
                <asp:ImageButton ID="ImageButton1" runat="server" OnCommand="UsedPops_Remove" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "tagid") %>'
                    ImageUrl="~/Images/errorIcon.png" />
                <a href="#">
                    <%# DataBinder.Eval(Container.DataItem, "tagname") %></a> </span>
        </ItemTemplate>
    </asp:Repeater>
</h3>
<asp:Repeater ID="rptUnused" runat="server">
    <ItemTemplate>
        <b style="padding-left: 5px; padding-right: 5px;">
            <asp:LinkButton ID="LinkButton1" runat="server" OnCommand="lbPop_Command" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "tagid") %>'><%# DataBinder.Eval(Container.DataItem, "tagname") %>
            </asp:LinkButton></b>
    </ItemTemplate>
</asp:Repeater>
<br />
</div>

public partial class TagFilter : System.Web.UI.UserControl
{
    public DataTable UsedDT { get; set; }
    public DataTable UnusedDT { get; set; }
    public SearchParameters searchParams { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        rptUsed.DataSource = UsedDT;
        rptUsed.DataBind();

        rptUnused.DataSource = UnusedDT;
        rptUnused.DataBind();
    }

我使用包含多个数据表的数据集进行循环,并尝试创建用户控件

            TagFilter tf = (TagFilter)Page.LoadControl("/Controls/TagFilter.ascx");
            tf.UnusedDT = ds.Tables[3];
            tf.UsedDT = ds.Tables[4];
            tagdiv.Controls.Add(tf);

当我单步执行调试器中的代码时,数据表在分配给控件时会有行,但在page_Load上没有行。 有人可以帮我找到我的错误吗?这是页面生命周期问题吗?

1 个答案:

答案 0 :(得分:0)

您应该在usercontrol中创建一个方法。

public void BindData()
{
    rptUsed.DataSource = UsedDT;
    rptUsed.DataBind();

    rptUnused.DataSource = UnusedDT;
    rptUnused.DataBind();
}

然后致电

tf.BindData();