如何从asp.net的列表框中选择项目?

时间:2015-11-22 17:04:10

标签: c# asp.net listbox

我的应用程序中有2个列表框,我无法从第一个列表框中获取所选项目。它表示空引用错误。

protected void Page_Load(object sender, EventArgs e)
{

    ListBox1.Items.Clear();
    List<Lekarna> lekarne = service.pridobiLekarne().ToList();

    foreach (Lekarna a in lekarne)
    {
        ListBox1.Items.Add(a.ID + " | " + a.imeLekarne + " | " + a.Kraj + " | " + a.Država + Environment.NewLine);
    }

}


protected void btnPoisci_Click(object sender, EventArgs e)
{

    string a = ListBox1.SelectedItem.ToString();
    int c1 = int.Parse(a[0].ToString());


    List<Zdravilo> zdravila = service.vrniVsaZdravilaGledeNaLekarno(c1).ToList();
    ListBox2.Items.Clear();
    foreach (Zdravilo b in zdravila)
    {

        ListBox2.Items.Add(b.ID + " | " + b.imeZdravila + " | " + b.letoIzdaje + " | " + b.proizvajalec + Environment.NewLine);
    }
}

3 个答案:

答案 0 :(得分:0)

您的代码问题是您在每次回发时重新绑定ListBox。因此,当您单击按钮btnPoisci时,会发生重新启动列表框的回发,并且在调用btnPoisci_Click方法时没有选定的项目,因此下面的行将抛出NRE: -

 string a = ListBox1.SelectedItem.ToString();

每次回发后都不要在ListBox中添加项目。使用IsPostBack属性检查它是否是PageLoad的初始获取请求,并且只添加一次: -

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
  {
    ListBox1.Items.Clear();
    List<Lekarna> lekarne = service.pridobiLekarne().ToList();
    foreach (Lekarna a in lekarne)
    {
        ListBox1.Items.Add(a.ID + " | " + a.imeLekarne + " | " + a.Kraj + " | " 
                                + a.Država + Environment.NewLine);
    }
  }
}

答案 1 :(得分:0)

您正在清除每个页面加载列表中的项目,这意味着您将在事件触发前清除列表。执行此操作时,清除列表的状态。尝试在页面init上加载项目或检查它是否是IsPostBack。

答案 2 :(得分:0)

如果不是回发,则必须仅加载ListBox1中的值。现在,您的页面加载事件中的第一行代码正在清除所有内容并刷新。这样做:

if (!IsPostBack) {
    ListBox1.Items.Clear();
    List<Lekarna> lekarne = service.pridobiLekarne().ToList();
}

这只会在第一次加载ListBox1到页面时,保留后续回发中任何选定项目的值。