我正在做作业。我需要将我的SQL数据库中的作者列表填充到Web窗体中。我已将数据填充到列表中。但是,当我选择一个作者时,它不会显示任何数据。我没有收到任何类型的错误或任何错误。
我有另一个与此程序相似的程序,并且我比较了两者之间的代码,它们看起来相同。我看不出有任何理由不会将该数据填充到我的标签中。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;
using System.Text;
namespace Module10Assignment
{
public partial class WebForm1 : System.Web.UI.Page
{
private string connectionString =
WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
{
fillAuthorList();
}
}
private void fillAuthorList()
{
lstAuthorList.Items.Clear();
string selectSQL = "SELECT au_lname, au_fname, au_id FROM authors";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
try
{
con.Open();
reader = cmd.ExecuteReader();
while(reader.Read())
{
ListItem newItem = new ListItem();
newItem.Text = reader["au_lname"] + "," + reader["au_fname"];
newItem.Value = reader["au_id"].ToString();
lstAuthorList.Items.Add(newItem);
}
reader.Close();
}
catch(Exception err)
{
lblResult.Text = "Error reading list of names";
lblResult.Text += err.Message;
}
finally
{
con.Close();
}
}
protected void lstAuthorList_SelectedIndexChanged(object sender, EventArgs e)
{
string selectSQL;
selectSQL = "SELECT * FROM titles t" ;
selectSQL += "inner join titleauthor ta" ;
selectSQL += "on t.title_id = ta.title_id" ;
selectSQL += "right join authors a" ;
selectSQL += "on ta.au_id = a.au_id" ;
selectSQL += "WHERE au_id = '" + lstAuthorList.SelectedItem.Value + "'";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataReader reader;
try
{
con.Open();
reader = cmd.ExecuteReader();
reader.Read();
StringBuilder sb = new StringBuilder();
sb.Append("<b>");
sb.Append(reader["au_lname"]);
sb.Append(", ");
sb.Append(reader["au_fname"]);
sb.Append("</b><br />");
sb.Append("Title: ");
sb.Append(reader["title"]);
sb.Append("<br />");
sb.Append("Price: ");
sb.Append(reader["price"]);
sb.Append("<br /");
sb.Append("Notes: ");
sb.Append(reader["notes"]);
sb.Append("<br />");
lblResult.Text = sb.ToString();
reader.Close();
}
catch(Exception err)
{
lblResult.Text = "Error getting list of names";
lblResult.Text += err.Message;
}
finally
{
con.Close();
}
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Module10Assignment.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.auto-style1 {
margin-top: 0px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblSelect" runat="server" Text="Select Author"></asp:Label>
<asp:DropDownList ID="lstAuthorList" runat="server" CssClass="auto-style1" OnSelectedIndexChanged="lstAuthorList_SelectedIndexChanged" AutoPostBack="True">
</asp:DropDownList>
<br />
<br />
<asp:Label ID="lblResult" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
当我从我的下拉列表中选择作者时。我希望我的标签(lblResult)充满我输入的信息。
答案 0 :(得分:0)
NB:两种情况下都可以使用DataSet代替DataReader
例如:
con.Open();
DataSet ds=new DataSet();
SqlDataAdapter da=new SqlDataAdapter(cmd)
da.Fill(ds);
lstAuthorList.DataSource=ds;
lstAuthorList.DataDind();