微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – ListBox未获取所选项目

我有一个ListBox,我将ListItems添加代码隐藏中.我遇到的问题是ListBox没有看到所选项目.我根据用户从DropDownList中选择的内容动态填充ListBox,因此DropDownList将AutopostBack设置为true.我认为这是以某种方式导致问题.

我的SelectedindexChanged方法(每当选择DropDownList中的项目时使用)调用一个名为PopulateListBox方法.以下是这些方法的样子:

protected void SelectedindexChanged(object sender,EventArgs e)
{
    string typestr = type.SelectedItem.Text;
    MyType = Api.GetType(typestr);
    PopulateListBox();
}

private void PopulateListBox()
{
    listBox.Items.Clear();
    foreach (PropertyInfo info in MyType.GetProperties())
        listBox.Items.Add(new ListItem(info.Name));
}

对于它的价值,这里是DropDownList和ListBox

<asp:DropDownList runat="server" ID="type" width="281px" OnSelectedindexChanged="SelectedindexChanged" AutopostBack="true" />

<asp:ListBox runat="server" ID="listBox" width="281px" height="200px" selectionmode="Multiple" />

我想要做的是在单击提交按钮时添加一个字符串列表(作为所选项的字符串)作为会话变量.将List添加到会话后,该按钮将重定向到新页面.在调试器中,字符串列表在我将其添加到会话时是空的.

listBox.GetSelectedindices()不返回任何内容.

更新

如果我没有在DropDownList中进行更改,我可以访问所选项目. ListBox最初是在页面加载时填充的,如果我进行选择,则会识别它们.如果我从DropDownList中选择一些内容并重新填充ListBox,则无法识别选择.

我的Page_Load方法只做两件事.它初始化我的Api变量并调用PopulateDropDown,如下所示:

private void PopulateDropDown()
{
    foreach (Type t in Api.GetAllTypes())
        type.Items.Add(new ListItem(t.Name));
    string typestr = type.Items[0].Text;
    Type = Api.GetType(typestr);
    PopulateListBox();
}

解决方法

问题是你在每个调用PopulateListBox()的Page_Load()上调用PopulateDropDown(),它会清除列表框并重新填充它.通过清除列表框,您可以清除选择.

您需要使用以下代码替换对Page_Load()中PopulateDropDown()的调用.我认为你没有意识到的问题是每次回发都会加载页面 – 而在页面生命周期中,页面加载发生在事件之前.因此,通过选择下拉项,首先执行Page_Load()事件(间接执行LoadListBox方法,清除选择).以下代码将在第一次加载页面时填充下拉列表.在使用加载下拉方法的任何其他地方保持相同:

protected void Page_Load(object sender,EventArgs e)
{
    // Do your API code here unless you want it to occur only the first
    // time the page loads,in which case put it in the IF statement below.
    if (!IsPostBack)
    {
        PopulateDropDown();
    }
}

IsPostBack返回一个布尔值,指示服务器端代码是否正在运行,因为页面是第一次加载(“false”)或作为回发(“true”).

正如我在其他地方所说的那样,请记住,具有多个所选值的潜在列表框必须以不同于具有单个选择潜力的列表框进行处理.不要引用listBox.SelectedItem,而是:

foreach (ListItem item in lbFullNames)
{
    if (item.Selected)
    {
        // Todo: Whatever you are doing with a selected item.
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


原文地址:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx 原文发布日期: 9/19/2005 原文已经被 Microsoft 删除了,收集过程中发现很多文章图都不全,那是因为原文的图都不全,所以特收集完整全文。 目录 前言 CLR启动程序
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采纳和使用,它的确提供了很多的优势也解决了很多的问题,但是我们也知道也并不是银弹,提供优势的同时它也给我们的开发人员和团队也带来了很多的挑战。 为了迎接或者采用这些新技术,开发团队需要更加注重一些流程或工具的使用,这样才能更好的适应这些新技术所
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下PLINQ中的分区。上一篇介绍了并行编程,这边详细介绍一下并行编程中的分区和自定义分区。 先做个假设,假设我们有一个200Mb的文本文件需要读取,怎么样才能做到最优的速度呢?对,很显然就是拆分,把文本文件拆分成很多个小文件,充分利用我们计算机中
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Microsoft为了利用这个硬件特性,于是在Visual Studio 2010 和 .NET Framework 4的发布及以上版本中,添加了并行编程这个新特性,我想它以后势必会改变我们的开发方式。 在以前或者说现在,我们在并行开发的时候可
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么
c语言怎么求字符串的长度并输出
c语言函数的三种调用方式是什么
c语言中保留两位小数怎么表示
double的输入格式符是什么