C#ListBox无法识别是否存在选择

C#ListBox无法识别是否存在选择,c#,listbox,C#,Listbox,我是c#的新手,所以请记住这一点 我正在为restful Web服务构建一个c#前端,我有一个列表框,我将项目放入其中: listBox.DataSource = list; listBox.DataTextField = "name"; listBox.DataValueField = "id"; listBox.DataBind(); 然后我选择一个项目并单击激活此代码的按钮: long id = Convert.ToInt64(listBox.SelectedItem.Value);

我是c#的新手,所以请记住这一点

我正在为restful Web服务构建一个c#前端,我有一个列表框,我将项目放入其中:

listBox.DataSource = list;
listBox.DataTextField = "name";
listBox.DataValueField = "id";
listBox.DataBind();
然后我选择一个项目并单击激活此代码的按钮:

long id = Convert.ToInt64(listBox.SelectedItem.Value);
问题是SelectedItem为空


就像我说的,我是c的新手,所以我不知道会出什么问题。

在您的
页面加载事件中,执行以下操作:

if(!IsPostBack)
{
    listBox.DataSource = list;
    listBox.DataTextField = "name";
    listBox.DataValueField = "id";
    listBox.DataBind();
}
注意:这将在第一次加载页面时绑定列表框,而不是在每次回发时绑定列表框,这是之前清除所选项目的操作。在ASP.NET中,在
页面加载
事件发生后单击事件处理程序发生,因此如果在绑定时未设置条件,则每次回发都会在事件处理程序有机会发现用户选择的内容之前清除数据

if(!Page.IsPostBack)
{    
    listBox.DataSource = list;
    listBox.DataTextField = "name";
    listBox.DataValueField = "id";
    listBox.DataBind();
}

这必须在您的
页面加载中

即使您已正确编码以防止在回发时删除您的选择,也必须满足另一项要求,以避免出现相同的症状。如果提供DataValueField,则该列中的值必须是唯一的。请参见问题

您何时进行数据绑定?首先,您需要将一些项目添加到列表框中,然后您需要在单击按钮之前单击其中一个项目。Winform、wpf或Asp.net?数据绑定和添加到列表发生在pageload上,所有项目都会显示在列表框中。然后我点击一个并点击按钮,调试器出现,我检查每个元素,SelectedItem返回空值。这是WinForm,您的列表框中有任何项目吗?如果是这样,请向我们展示它的代码,我们可能会提供帮助。谢谢,这很有效。我在这方面花了太长时间。这个解释很有帮助。没问题,ASP.NET总是让你受益匪浅。将来,当数据或所选项目消失时,请记住查找此项,因为大多数情况下这是问题所在。