父页面数据控件绑定后,用户控件中的下一个事件是什么?

时间:2016-04-06 18:18:12

标签: c# asp.net

我创建了一个包含 DropDownList 和其他一些控件的用户控件。我的用户控件有一个名为 UserName 的公共属性,这将有助于检索数据以填充下拉列表。

<uc1:MyUserControl runat="server" ID="ucDetails" UserName = '<%# Eval("UserName")%>' />

我在设置用户控件属性时发现了。对于UserName(请参阅上面的示例),在usercontrol的page_Load期间未设置该值。它是在父页面的DataBind事件期间设置的,这是在用户控件的page_load事件之后的方式。

从用户控件预测中,我仍可以调用检索数据的下一个最接近的事件是什么,然后将其绑定到我的DropDownList?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果要在ListView中的每个项目的数据绑定事件期间设置下拉列表,则在ListView控件上添加ItemDataBound事件的处理程序:

<asp:ListView ID="listView1" runat="server" OnItemDataBound="listView1_ItemDataBound">

现在,在代码隐藏中的那个事件处理程序中,获取此行/项的用户控件实例:

protected void listView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    var userControl = e.Item.FindControl("ucDetails") as UserControlClassName;
}

然后,您可以在用户控件上执行任何操作,例如在其上设置UserName属性和/或设置下拉列表的项目。

注意:如果您需要为每个项目设置不同的属性,您可以从ListViewItemEventArgs对象获取当前项目的数据对象:e.Item.DataItem as [whatever type the data item should be]。< / p>

或者,如果要确保在设置UserName之后始终填充下拉列表,则可以更新UserName属性的setter,以便它可以在&#39; s设置为有效的用户名(不为null或为空等),它(setter)调用一个方法来填充下拉列表。这样,在数据绑定ListView的页面生命周期中的哪个位置并不重要。这可能看起来像这样:

public string UserName
{
    get { return _username; }
    set
    {
        // Make sure new value is valid (not null/empty, exists, etc.)
        if (string.IsNullOrEmpty(value))
            // Do something (throw exception, show error, etc.)
        else
        {
            _userName = value;
            SetupDropDownList();
        }
    }
}
private string _userName;