0

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

<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)状态,则不会发生任何事情。但是如果我删除它,第一个下拉列表会填充两次,然后只有第二个下拉列表出现。有什么建议为什么会发生这种情况?

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

4

2 回答 2

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();
        }
于 2013-07-22T10:13:21.020 回答
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++;
        }


    }

希望它会帮助你...

于 2013-07-22T09:49:35.543 回答