drpDwnLstBillContact.SelectedValue = billContactId.ToString();
drpDwnLstRegContact.SelectedValue = regContactId.ToString();
drpDwnLstTechContact.SelectedValue = techContactId.ToString();
大家好,我正在尝试设置下拉列表的选择值属性,但我有一个问题。
变量的值为:
billContactId=786867;
regContactId=3487347;
techContactId=37463;
第一行中的问题是billContactId被分配给第二行的drpDwnLstBillContact的selectedvalue属性regContactId被分配给drpDwnLstRegContact的selectedvalue属性。但是当它被分配给它时,第一个下拉列表(drpDwnLstBillContact)选择的值也被设置为regContactId。我很困惑,为什么第二行代码会影响第一行?
答案 0 :(得分:3)
我发现了问题和解决方案。
在FillDropDowns方法中,我只创建了一个ListItem并将其添加到每个下拉列表中,因此当我更改下拉列表selectedvalue属性时,它会更改列表项,并且所有下拉列表的listitem也会更改。现在我为每个下拉列表创建了单独的ListItem对象,问题就解决了。
旧代码
foreach (string[] contactData in data)
{
ListItem li = new ListItem(contactData[0], contactData[1]);
drpDwnLstRegContact.Items.Add(li);
drpDwnLstTechContact.Items.Add(li);
drpDwnLstBillContact.Items.Add(li);
}
新代码
foreach (string[] contactData in data)
{
ListItem li = new ListItem(contactData[0], contactData[1]);
ListItem li1 = new ListItem(contactData[0], contactData[1]);
ListItem li2 = new ListItem(contactData[0], contactData[1]);
drpDwnLstRegContact.Items.Add(li);
drpDwnLstTechContact.Items.Add(li1);
drpDwnLstBillContact.Items.Add(li2);
}
答案 1 :(得分:2)
它不会影响第一个;下拉列表是原子的,我以前从未听说过这个问题。你确定代码中的其他地方没有将控件重新分配给不同的值吗?
答案 2 :(得分:1)
我无法清楚地知道问题所在。不过,我猜您在每个DropDownList
事件中填写Page.Load
,这使得第一项始终被选中。
在Page.Load
处理程序上尝试以下操作:
if (!Page.IsPostBack)
{
FillDropDownList();
}
答案 3 :(得分:1)
这可以提供帮助。 (不要问为什么......)
drpDwnLstBillContact.SelectedIndex = -1;
drpDwnLstBillContact.SelectedIndex =
drpDwnLstBillContact.Items.IndexOf(drpDwnLstBillContact.Items.
FindByValue(billContactId.ToString()));
drpDwnLstRegContact.SelectedIndex = -1;
drpDwnLstRegContact.SelectedIndex =
drpDwnLstRegContact.Items.IndexOf(drpDwnLstRegContact.Items.
FindByValue(regContactId.ToString()));
drpDwnLstTechContact.SelectedIndex = -1;
drpDwnLstTechContact.SelectedIndex =
drpDwnLstTechContact.Items.IndexOf(drpDwnLstTechContact.Items.
FindByValue(techContactId.ToString()));