我的代码是:
private void Add_Items()
{
for (int x = 1; x < 53; x++)
{
ListBox1.Items.Add("Item" + x);
ListBox1.DataValueField = "Value" + x;
}
}
单击时,这些项都不会引发SelectedIndexChanged事件。 请协助。
答案 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