我的网页应允许我从下拉列表中选择书名,按下选择按钮,文本框(即作者,年份,类别)应根据所选书籍进行更改。 但是,当我从列表中选择第二本书时,它总是循环返回以在下拉列表中显示第一本书的详细信息,无论我选择什么,它始终只显示第一个记录。
这是我的代码:
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();
}
}
我尝试了许多不同的代码变体,但似乎并没有起作用。 这可能是一个简单的修复,但我不能把手指放在它上面。 任何帮助赞赏。谢谢!
答案 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();
}
你应该做的是启用视图状态,你可以在属性窗口中找到它
检查这些链接
答案 2 :(得分:1)
试试这段代码希望它会有所帮助
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
LoadDetails();
}
}