【问题标题】:Adding and removing listbox items at runtime在运行时添加和删除列表框项
【发布时间】:2012-12-23 21:15:34
【问题描述】:

我有两个列表框,它们在运行时在网页 Page_Load 事件中填充。我正在使用 Page.IsPostBack 来确保仅在不回发时填充列表。

列表框 A 大约有 150 个项目,而列表框 B 为空。我有两个按钮,添加和删除。我选择列表框 A 中的项目并按添加按钮,这些项目将移动到列表框 B。

我在列表框 B 中选择这些项目时遇到问题。如果我将 Autopostback 设置为 TRUE,我将无法选择任何项目。当我选择一个项目时,会发生回发并且我的选择被清除,就像没有选择任何项目一样,即使我将 Enableviewstate 设置为 TRUE。

如果我将 Autopostback 设置为 FALSE,我可以毫无问题地选择项目,但是当我在服务器端检查这些项目的 Selected 属性时,它们都是 FALSE。

无论自动回发设置为什么,我都可以在服务器端看到填充的项目,只有 selected 属性始终为 false。

所有列表框项及其值都是唯一的。

对解决这个问题有什么建议吗?

这是我用来在添加按钮的点击事件中填充列表框 b 的代码:

    For i = 0 To (ListboxA.Items.Count - 1)
        If ListboxA.Items.Item(i).Selected = True Then
            ListboxB.Items.Add(ListboxA.Items.Item(i))
        End If
    Next
    For i = 0 To (ListboxB.Items.Count - 1)
        If ListboxA.Items.Contains(ListboxB.Items.Item(i)) Then
            ListboxA.Items.Remove(ListboxB.Items.Item(i))
        End If
        ListboxB.Items.Item(i).Selected = False
    Next

和列表框:

    <asp:ListBox ID="ListboxA" runat="server" SelectionMode="Multiple" AutoPostBack="True"></asp:ListBox>
    <asp:ListBox ID="ListboxB" runat="server" SelectionMode="Multiple" AutoPostBack="True"></asp:ListBox>

【问题讨论】:

  • @YardenST 我已经编辑了我的帖子以包含代码

标签: asp.net vb.net listbox


【解决方案1】:

必须进行选择,因为您在每次回发时都在执行 listbox.databind()。 仅当它不是回发时才执行此操作,并且即使在回发之后您的选择仍将保留。

【讨论】:

  • 我没有在回发时进行数据绑定。正如我在问题中提到的,我正在检查 Page.IsPostBack 以确保不会发生这种情况
  • 我明白了。问题是“列表框是在运行时创建的”。并且每当您在运行时创建控件时,您都必须手动处理回发数据。
  • 只需覆盖页面的 loadviewstate 和 saveviewstate 方法。在保存视图状态方法中,将选定的索引保存到视图状态。在 loadViewstate 方法中,加载值并应用于列表框。 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多