ListBox将选定的索引保持为-1

时间:2018-05-10 08:59:18

标签: c# asp.net sql-server

当我尝试在列表框中找到所选项目时,它会一直返回-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();

}

提前致谢!

1 个答案:

答案 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();
    }

}

这可以解决您的问题。