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

时间:2015-07-24 10:39:36

标签: c# asp.net combobox ajaxcontroltoolkit

我使用Ajax Toolkit创建了2个组合框。其中一个有一个系统列表。每当选择一个系统时,我想用一个子系统列表填充另一个组合框。我没有使用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事件也从未被触发过。

1 个答案:

答案 0 :(得分:0)

在仔细阅读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);