这里我试图根据另一个下拉列表中的选定值填充下拉列表。这是我的代码:
<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)
条件,则没有任何反应。但是,如果我删除它,第一个下拉列表将填充两次,然后只有第二个下拉列表。
有什么建议为什么会这样?
编辑:我已添加代码以填充第一个下拉列表。第二个下拉列表的代码也相同。
答案 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();
}