如何获取组合框中所选项目的 ID 并用它填充另一个组合框?

How to get id of the selected item in combobox and populate another combobox with it?

我用 Ajax Toolkit 创建了 2 个组合框。其中之一有一个系统列表。 I wanted to fill the other combobox with a list of subsystems whenever a system is selected.我没有使用 DisplayMemberValueMember,大多数示例都在使用它们。 .aspx 端以防万一:

<ajaxToolkit:ComboBox ID="cbox1" runat="server" OnSelectedIndexChanged="cbox1_SelectedIndexChanged" />

这对我正在尝试的方法可行吗?我使用的事件是否正确?(我猜不是,但其他事件似乎无关)让我给你看代码:

protected void fillSystemCombo()
        {
            var sysOperations = new ModelOperations.ConstantSystem.ConstantSystemOperations();
            var sys = sysOperations.GetSystemList().TransactionResultList;

            foreach (var item in sys)
            {
                cbox1.Items.Add(item.description);
            }
        }

这很好用,我可以在我的第一个组合框中看到系统。

这是我尝试填充第二个的方法:

protected void cbox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var subSysOperations = new ModelOperations.ConstantSubSystem.ConstantSubSystemOperations();
            int index = Convert.ToInt32(cbox1.SelectedItem.Value);//i think this should get the id...

            var subsys = subSysOperations.GetSubSystemList().TransactionResultList;

            foreach (var item in subsys)
            {
                if (item.sysID == index)
                {
                    cbox2.Items.Add(item.description);
                }
            }
        }

sysID是SubSystem中的外键,也就是System的ID。顺便说一句,即使我在组合框中单击了一个项目,但在调试程序时我的 SelectedIndexChanged 事件从未触发。

仔细阅读了Items.Add所取的参数后,我其实找到了答案。它需要一个 ListItem,所以如果我在循环中创建一个 ListItem,我最终可以添加带有 TextValue 的项目,如下所示:

   foreach (var item in sys)
            {
                combo1.Items.Add(new ListItem { Text = item.description, Value = item.ID.ToString() });
            }

之后我可以用

获取索引
int index = Convert.ToInt32(combo1.SelectedValue);