动态添加的项不会引发事件。(ASP.NET ListBox)

时间:2014-01-21 05:59:19

标签: c# asp.net

我的代码是:

private void Add_Items()
    {
        for (int x = 1; x < 53; x++)
        {
            ListBox1.Items.Add("Item" + x);
            ListBox1.DataValueField = "Value" + x;
        }

    }

单击时,这些项都不会引发SelectedIndexChanged事件。 请协助。

3 个答案:

答案 0 :(得分:3)

确保启用了autopostback,就像在此测试中一样:

<asp:ListBox ID="listBoxLocation" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="listBoxLocation_SelectedIndexChanged" EnableViewState="True">

<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>

</asp:ListBox>

或动态填充:

Protected void Button1_Click (object sender, System.EventArgs e)
{
    ListBox1.Items.Add(new ListItem("Carbon", "C"));
    ListBox1.Items.Add(new ListItem("Oxygen", "O"));
}

来自:http://msdn.microsoft.com/en-us/library/14atsyf5%28v=vs.85%29.aspx

答案 1 :(得分:0)

您的代码非常模糊,我将假设您的ListBox没有以正确的方式链接到SelectedIndexChanged事件。

如果您动态创建ListBox链接,请按以下方式进行链接:

    public void initialize()
    {
        ListBox lb = new ListBox();
        lb.SelectedIndexChanged += lb_SelectedIndexChanged;
    }

    private void lb_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Do Selected Index Changed Code Here
    }

如果你有一个控件打开的视图/表单,只需确保ListBox的事件已设置或自然不会触发。

* 编辑1 如其他答案中所述,您的控件需要设置PostBack。您还应检查页面的PostBack状态,以确保不会持续重新绘制控件,因为这将继续重置动态添加的控件。

答案 2 :(得分:0)

首先

ListBox1.DataValueField不应设置为每个项目。此属性设置数据对象(每行)上的字段以捕获值。以下是此属性http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.datavaluefield(v=vs.110).aspx的MSDN链接。

接下来,我假设您已将所有前端代码连接起来。

<asp:ListBox ID="ListBox1" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"  runat="server"></asp:ListBox>

这已选中已更改的已更改事件。但是,对于此控件实际上Post数据,您需要再提供一个属性。添加

AutoPostBack="true"

以你的身份控制。

<asp:ListBox ID="ListBox1" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" AutoPostBack="true" runat="server"></asp:ListBox>

这开始了魔术。 AutoPostBack的MSDN:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.autopostback(v=vs.110).aspx