dropdown_SelectedIndexChanged仅适用于第二次

时间:2013-07-22 07:53:17

标签: c# asp.net drop-down-menu

这里我试图根据另一个下拉列表中的选定值填充下拉列表。这是我的代码:

<div>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" onselectedindexchanged="DropDownList1_SelectedIndexChanged">
    </asp:DropDownList>

    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true">
    </asp:DropDownList> 
</div>
</form>

以下是代码隐藏:

 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         getDeveloperId();
     }
 }


  public void getProjectId()
        {
            string projName, projId, projFinal;
            using (var cmdScope_ID = new SqlCommand("SELECT [ProjectId],[ProjectName] FROM [DB].[dbo].[Sample Table]", con))
            {
                using (var reader = cmdScope_ID.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        projId = reader[0].ToString();
                        projName = reader[1].ToString();
                        projFinal = projId + "-" + "[" + projName + "]";
                        DropDownList1.Items.Insert(0, new ListItem(projFinal, "1"));
                    }
               }
            }
        }

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
 {
     //code to get data from DB and populate DropDownList2
 }

我的问题是当我从第一个下拉列表中选择任何条目时,第一次没有任何反应。只有页面重新加载。但是,如果我再次这样做,那么只有第二个下拉列表填充。

另外,如果我保持if (!IsPostBack)条件,则没有任何反应。但是,如果我删除它,第一个下拉列表将填充两次,然后只有第二个下拉列表。 有什么建议为什么会这样?

编辑:我已添加代码以填充第一个下拉列表。第二个下拉列表的代码也相同。

2 个答案:

答案 0 :(得分:1)

嘿问题是行DropDownList1.Items.Insert(0, new ListItem(projFinal, "1"));

因为您要在index "0"上添加值为1的项目,并且编译器未附加selectedchange下拉事件。

请使用值绑定不同索引上的项目,然后只能解决您的问题。

我制作了一个简单的程序来测试你的问题。请看。

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            fill();
        }

    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<int> lst =
      new List<int>();
        lst.Add(12);
        lst.Add(22);
        lst.Add(32);
        DropDownList2.DataSource = lst;
        DropDownList2.DataBind();
    }

    private void fill()
    {
        List<int> lst =
        new List<int>();
        lst.Add(1);
        lst.Add(2);
        lst.Add(3);
        var count=0;
        foreach (var i in lst)
        {
            DropDownList1.Items.Insert(count, new ListItem(i.ToString(), count.ToString()));
            count++;
        }


    }

希望它会帮助你......

答案 1 :(得分:1)

我已经改变了数据绑定到下拉列表的方式。现在它的工作正常。

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                getDeveloperId();
            }
        }
        public void getDeveloperId()
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter("SELECT [DeveloperId], [DeveloperName] FROM [DB].[dbo].[tbl]", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DropDownList1.DataSource = ds.Tables[0];  //bind the ddp_dataview to dataview
            DropDownList1.DataTextField = "DeveloperName";
            DropDownList1.DataValueField = "DeveloperId";
            DropDownList1.DataBind();
        }