无法使数据显示在标签中

时间:2019-07-21 22:12:04

标签: c# sql asp.net webforms

我正在做作业。我需要将我的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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <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)充满我输入的信息。

1 个答案:

答案 0 :(得分:0)

  1. 检查是否在lstAuthorList.SelectedItem.Value中获取选定的值
  2. 调试代码并获取完整的查询,然后将其复制并粘贴到sql编辑器中并检查结果
  3. 如果获得预期的结果,请检查每个读取器的值reader [“ au_lname”],reader [“ au_fname”]等

NB:两种情况下都可以使用DataSet代替DataReader

例如:

con.Open();
DataSet ds=new DataSet();
SqlDataAdapter da=new SqlDataAdapter(cmd)
da.Fill(ds);
lstAuthorList.DataSource=ds;
lstAuthorList.DataDind();