当我尝试在列表框中找到所选项目时,它会一直返回-1作为所选索引。此代码在按钮单击事件
中执行int test = Convert.ToInt32(lbProjects.SelectedIndex.ToString());
String number = lbProjects.Items [test] .Value;
我试图在列表框中找到所选项目的值,为了做到这一点,我需要所选项目的索引,但是当我调试时,无论我选择哪个项目,它都会返回-1。有什么我做错了或者它与我填充列表框的方式有关吗?
ListBox代码
protected void Page_Load(object sender, EventArgs e)
{
String Sql = @" select * from project";
SqlConnection conn = new SqlConnection(Properties.Resources.cString);
SqlDataAdapter DA = new SqlDataAdapter(Sql, Properties.Resources.cString);
DataSet DS = new DataSet();
DA.Fill(DS, "Project");
DataTable DT = DS.Tables["Project"];
lbProjects.DataValueField = "ProjectID";
lbProjects.DataTextField = "ProjectName";
lbProjects.DataSource = DT;
lbProjects.DataBind();
}
提前致谢!
答案 0 :(得分:3)
在Web应用程序中,特别是在ASP.NET Page_Load
中,每次提交页面时都会执行。
因此列表绑定代码在每个page_load期间执行,并将list.SelectedIndex设置为-1,并且在UI中进行的选择将丢失。
因此,您需要确保列表再次重新绑定并保持选择。
您需要检查在将数据源绑定到数据源之前是否未回发页面。您可以通过以下代码来实现。
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
String Sql = @" select * from project";
SqlConnection conn = new SqlConnection(Properties.Resources.cString);
SqlDataAdapter DA = new SqlDataAdapter(Sql, Properties.Resources.cString);
DataSet DS = new DataSet();
DA.Fill(DS, "Project");
DataTable DT = DS.Tables["Project"];
lbProjects.DataValueField = "ProjectID";
lbProjects.DataTextField = "ProjectName";
lbProjects.DataSource = DT;
lbProjects.DataBind();
}
}
这可以解决您的问题。