2
 drpDwnLstBillContact.SelectedValue = billContactId.ToString();
 drpDwnLstRegContact.SelectedValue = regContactId.ToString();
 drpDwnLstTechContact.SelectedValue = techContactId.ToString();

我正在尝试设置下拉菜单的 selectedvalue 属性,但我遇到了问题。

变量的值是:

billContactId=786867;
regContactId=3487347;
techContactId=37463;

问题出在第一行。billContactId分配给drpDwnLstBillContact 的selectedvalue 属性,同样在第二行,regContactId 分配给drpDwnLstRegContact 的selectedvalue 属性。但是当它被分配给它第一个下拉列表(drpDwnLstBillContact)时,选定的值也设置为 regContactId。为什么第二行代码会影响第一行?

4

4 回答 4

4

我找到了问题和解决方案。

在 FillDropDowns 方法中,我只创建了一个 ListItem 并将其添加到每个下拉列表中,因此当我更改下拉列表 selectedvalue 属性时,它会更改列表项,并且所有下拉列表的列表项也会更改。现在我为每个下拉列表创建了单独的 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);
        }
于 2011-06-30T14:29:38.557 回答
2

它不会影响第一个;下拉列表是原子的,我以前从未听说过这个问题。您确定在代码中的其他地方没有将控件重新分配给不同的值吗?

于 2011-06-30T12:21:57.497 回答
1

我无法清楚地了解问题所在。但是我猜你正在填写你DropDownList的每一个Page.Load事件,这使得第一个项目总是被选中。

在处理程序上尝试以下操作Page.Load

if (!Page.IsPostBack)
{
    FillDropDownList();
}
于 2011-06-30T12:22:08.460 回答
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()));
于 2011-06-30T12:49:58.253 回答