我的应用程序中有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);
}
}
答案 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到页面时,保留后续回发中任何选定项目的值。