我使用Ajax Toolkit
创建了2个组合框。其中一个有一个系统列表。每当选择一个系统时,我想用一个子系统列表填充另一个组合框。我没有使用DisplayMember
或ValueMember
,大多数示例都在使用它们。
.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
事件也从未被触发过。
答案 0 :(得分:0)
在仔细阅读Items.Add
所采用的参数后,我确实找到了答案。它需要ListItem
,所以如果我在循环中创建ListItem
,我最终可以添加Text
和Value
这样的项目:
foreach (var item in sys)
{
combo1.Items.Add(new ListItem { Text = item.description, Value = item.ID.ToString() });
}
之后我可以用
获取索引int index = Convert.ToInt32(combo1.SelectedValue);