文本框从下拉列表中选择后不会更改

时间:2014-03-24 12:05:59

标签: c# asp.net

我的网页应允许我从下拉列表中选择书名,按下选择按钮,文本框(即作者,年份,类别)应根据所选书籍进行更改。 但是,当我从列表中选择第二本书时,它总是循环返回以在下拉列表中显示第一本书的详细信息,无论我选择什么,它始终只显示第一个记录。

这是我的代码:

  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 BookId=@BookId", 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();

    }
}

我尝试了许多不同的代码变体,但似乎并没有起作用。 这可能是一个简单的修复,但我不能把手指放在它上面。 任何帮助赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

您的问题出现在Page_Load中,btnSearch_Click事件被触发但之后它将进入Page_Load事件,因为您没有检查页面是否回发它会再次重新加载详细信息,这将解决问题:

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

答案 1 :(得分:2)

你发生的事情被称为回复,你应该做的是

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

你应该做的是启用视图状态,你可以在属性窗口中找到它

检查这些链接

What is a postback?

http://msdn.microsoft.com/en-us/library/ms972976.aspx

答案 2 :(得分:1)

试试这段代码希望它会有所帮助

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