2014-03-24 78 views
0

我的网页应该让我从下拉列表中选择一本书的标题,按下选择按钮,和文本框(即作者,年份,等级)应该改变根据所选书。 然而,当我从列表中选择第二本书,它总是返回到显示第一本书的细节下拉列表上,不管我选择,它总是只显示第一个记录。文本框,从下拉列表中选择后,在不改变

这里是我的代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    LoadDetails(); 
} 

private void LoadDetails() 
{ 
    SqlConnection conn; 
    SqlCommand comm; 
    SqlDataReader reader; 
    string connectionString =ConfigurationManager.ConnectionStrings["Database"].ConnectionString; 
    conn = new SqlConnection(connectionString); 
    comm = new SqlCommand("SELECT BookId, Title FROM Books", conn); 
    try 
    { 
     conn.Open(); 
     reader = comm.ExecuteReader(); 
     ddlSearch.DataSource = reader; 
     ddlSearch.DataValueField = "BookId"; 
     ddlSearch.DataTextField = "Title"; 
     ddlSearch.DataBind(); 
     reader.Close(); 
    } 

    catch 
    { 
     lblError.Text = "Error loading books"; 
    } 

    finally { conn.Close(); } 
} 
protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    SqlConnection conn; 
    SqlCommand comm; 
    SqlDataReader reader; 
    string connectionString =ConfigurationManager.ConnectionStrings["Database"].ConnectionString; 
    conn = new SqlConnection(connectionString); 
    comm = new SqlCommand("SELECT ISBN, Author, Title, Year, Category FROM Books Where [email protected]", conn); 
    comm.Parameters.Add("@BookId", System.Data.SqlDbType.Int); 
    comm.Parameters["@BookId"].Value = ddlSearch.SelectedItem.Value; 
    try 
    { 
     conn.Open(); 
     reader = comm.ExecuteReader(); 
     if (reader.Read()) 
     { 
      txtIsbn.Text = reader["ISBN"].ToString(); 
      txtAuthor.Text = reader["Author"].ToString(); 
      txtTitle.Text = reader["Title"].ToString(); 
      txtYear.Text = reader["Year"].ToString(); 
      txtCat.Text = reader["Category"].ToString(); 

     } 
    } 


    catch 
    { 
     lblError.Text = "Error laoding pages"; 
    } 

    finally 
    { 
     conn.Close(); 

    } 
} 

我试过的代码许多不同的变化,但它似乎没有奏效。 它可能是一个足够简单的修复,但我不能把它放在手指上。 任何帮助表示赞赏。谢谢!

+0

认沽断点在你的代码。你会注意到'Click'事件在'Load'之前被触发。 – melancia

+0

添加的IsPostBack条件,你的Page_Load –

+0

感谢@现在AliBaghdadi..Works完美! – user3249809

回答

2

您的问题是在Page_Load中,btnSearch_Click事件被触发而在此之后将进入Page_Load事件,并因为你没有检查,如果页面回它会重新加载的细节,这将solvethe问题:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    LoadDetails(); 
} 
1

试试这个代码,希望这将有助于

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     LoadDetails(); 
    } 
} 
相关问题