这是我屏幕的一部分:
用户可以从下拉列表中选择一个选项,然后单击添加按钮。这是添加按钮的代码:
protected void btnModuleAdd_Click(object sender, EventArgs e)
{
var selectedModule = ddlModsList.SelectedItem.ToString();
var graphicName = this.GraphicName;
var xr = new GraphicModuleXRef();
xr.GraphicName = graphicName;
xr.Module = selectedModule;
// Take drop down list selection and add it to GraphicModuleXRef table.
var context = new XRefDataContext();
context.GraphicModuleXRefs.InsertOnSubmit(xr);
context.SubmitChanges();
}
基本上,它接受用户的选择并将其写到表格中。这部分工作正常。
在我的 Page_Load 中,我检查是否 IsPostback,如果是,我运行以下代码:
private void LoadOtherModulesUsed()
{
if (this.GraphicName != null)
{
lbModules.Items.Clear();
var context = new XRefDataContext();
var q = context.GraphicModuleXRefs
.Where(a => a.GraphicName.Contains(this.GraphicName));
foreach (GraphicModuleXRef gr in q)
{
lbModules.Items.Add(new ListItem(gr.Module.ToString()));
}
}
}
此代码从表中读取,查找与条件匹配的所有记录,并将它们添加到列表框中。
所以,我期望发生的是重新加载页面并重新填充列表框,包括刚刚添加到表中的新条目。但是,这并没有发生。屏幕像重新加载一样刷新,但条目没有出现在列表框中。然而,它就在那里,只是看不见而已。如果用户添加另一个条目,通过单击“添加”按钮,列表会“向上滚动”一行,并且可以看到前一个条目。但是,不是新的。如果用户退出屏幕并重新进入,则可以看到列表框中的所有条目。几乎就像列表框太短而无法显示所有记录,但我尝试了不同的高度,没有区别。
我想知道是否有人可以指出我正确的方向?
简而言之,当向列表框添加新项目时,除非添加另一个项目,否则它不会立即可见,从而“滚动”列表。在添加另一个条目之前,即使使用滚动条滚动列表也不会显示新条目。而且,如果您向上滚动列表,您可以看到先前的条目。这么奇怪!
编辑:试图更简单地描述这一点:
- 用户通过按添加按钮将项目添加到列表框。
- 新项目不会出现在列表框中。
- 用户通过按添加按钮将另一个项目添加到列表框。
- 如果用户向上滚动列表框,则先前的项目现在显示在列表框中。
- 但是,除非重复第 3 步,否则不会出现刚刚添加的最新项目。
- 此外,退出页面然后返回加载列表中的每个项目并且所有项目都是可见的。