首页 > 解决方案 > 选择下拉列表时,它应该显示表中列的值..如何实现?

问题描述

首先我创建了一个表Grocery_Branch,然后我插入了值:

CREATE TABLE Grocery_Branch
(Grocery_Branch_No INTEGER IDENTITY(1,1) PRIMARY KEY,
 Grocery_Branch_Name VARCHAR(50) UNIQUE NOT NULL,
 Grocery_Branch_Address VARCHAR(50) UNIQUE NOT NULL,
 Grocery_Phone_No VARCHAR(20) UNIQUE NOT NULL
 )

INSERT INTO Grocery_Branch (Grocery_Branch_Name,Grocery_Branch_Address,Grocery_Phone_No)
VALUES('Inala','39 Lavender Street, Inala QLD 4077','0423957193')
INSERT INTO Grocery_Branch (Grocery_Branch_Name,Grocery_Branch_Address,Grocery_Phone_No)
VALUES('Richlands','1 Progress Road, Richlands QLD 4077','0423957192')
INSERT INTO Grocery_Branch (Grocery_Branch_Name,Grocery_Branch_Address,Grocery_Phone_No)
VALUES ('Forest Lake','235 Forest Lake Boulevard, Forest Lake QLD 4078','0423957191')

然后我创建了管理员表:

CREATE TABLE Administrator
(Administrator_No INTEGER IDENTITY(1,1) PRIMARY KEY,
 Administrator_Name VARCHAR(50) NOT NULL,
 Administrator_Username VARCHAR(30) UNIQUE NOT NULL,
 Administrator_Password VARCHAR(30) NOT NULL,
 Administrator_Phone_No VARCHAR(20) UNIQUE NOT NULL,
 Administrator_Email VARCHAR(30) UNIQUE NOT NULL,
 Grocery_Branch_No INTEGER NOT NULL FOREIGN KEY REFERENCES Grocery_Branch(Grocery_Branch_No)
 )

然后我为管理员注册创建了一个存储过程:

CREATE PROCEDURE AdminRegistration

@AdministratorName VARCHAR(50),
@AdministratorUsername VARCHAR(30),
@AdministratorPassword VARCHAR(30),
@AdministratorPhoneNo VARCHAR(20),
@AdministratorEmail VARCHAR(30),
@GroceryBranchName VARCHAR(20)
AS
BEGIN
INSERT INTO Administrator(Administrator_Name,Administrator_Username,Administrator_Password,Administrator_Phone_No,Administrator_Email,Grocery_Branch_No)
SELECT @AdministratorName,@AdministratorUsername,@AdministratorPassword, @AdministratorPhoneNo,@AdministratorEmail,(SELECT Grocery_Branch_No FROM Grocery_Branch WHERE Grocery_Branch_Name = @GroceryBranchName)
END

然后这就是我所做的SignUp.aspx

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <p>
        <strong>SIGN UP</strong></p>
        <p>
            Name:
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="This field is required"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="Alphabets only" ValidationExpression="^[a-zA-Z\s]*$"></asp:RegularExpressionValidator>
        </p>
        <p>
            Username:
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2" ErrorMessage="This field is required"></asp:RequiredFieldValidator>           
        </p>
        <p>
            Password:
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="TextBox3" ErrorMessage="This field is required"></asp:RequiredFieldValidator>           
        </p>
        <p>
            Phone No:
            <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBox4" ErrorMessage="This field is required"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="TextBox4" ErrorMessage="Numbers only" ValidationExpression="^[0-9]*$" />           
        </p>
        <p>
            Email:
            <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="TextBox5" ErrorMessage="This field is required"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" ControlToValidate="TextBox5" ErrorMessage="Email should have @ and .com" ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" />
        </p>
        <p>
            Select Branch:
            <asp:DropDownList ID="DropDownList1" runat="server">
            </asp:DropDownList>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="DropDownList1" ErrorMessage="Please select a branch"></asp:RequiredFieldValidator>
        </p>
        <p>
            &nbsp;</p>
        <p>
            <asp:Button ID="Button1" runat="server" OnClick="Register" Text="Register" />
        </p>
    </form>
    </body>
</html>

然后这就是我所做的SignUp.cs

using System;
using System.Web.UI;
using System.Data.SqlClient;

namespace Grocery_Demo
{
    public partial class SignUp : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Register(object sender, EventArgs e)
        {
            string CS;
            CS = "data source=LAPTOP-ODS96MIK\\MSSQL2014; database = Grocery_Demo; integrated security=SSPI";
            SqlConnection con = new SqlConnection(CS);
            SqlCommand cmd = new SqlCommand("AdminRegistration", con);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            con.Open();
            cmd.Parameters.AddWithValue("@AdministrationName", TextBox1.Text);
            cmd.Parameters.AddWithValue("@AdministrationUsername", TextBox2.Text);
            cmd.Parameters.AddWithValue("@AdministrationPassword", TextBox3.Text);
            cmd.Parameters.AddWithValue("@AdministrationPhoneNo", TextBox4.Text);
            cmd.Parameters.AddWithValue("@AdministrationEmail", TextBox5.Text);
            cmd.Parameters.AddWithValue("@GroceryBranchName", DropDownList1.SelectedValue);
            cmd.ExecuteNonQuery();
            MessageBox("You are registered successfully");
            Session["Username"] = TextBox2.Text;
            Session["Password"] = TextBox3.Text;
            Response.Redirect("AdminHomepage.aspx");
            con.Close();
        }

        public void MessageBox(string message)
        {
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "MessageBox", "<script language='javascript'>alert('" + message + "')</script>");
        }
    }
}

当我运行SignUp.aspx页面时,它以我想要的方式显示管理表单。

问题在于“选择分支”下拉列表。

我想要实现的是,当我单击下拉列表时,它应该显示表中Grocery_Branch_Name列的值Grocery_Branch列表。相反,当我单击它时,下拉列表是空的。

我无法弄清楚我犯的错误在哪里。错误可能在我的.cs.aspx或存储过程中。

如果我的存储过程或.aspx或中的语法逻辑有任何错误.cs,那么如果提供正确的语法解决方案,那将非常有帮助。

标签: c#asp.netsql-serverstored-proceduresado.net

解决方案


问题是您没有向下拉列表提供任何数据。在 Web 表单中,这通常通过两种方式完成:

1.使用数据源对象

在这种情况下,您应该在 .aspx 页面中添加此对象:

<asp:ObjectDataSource ID="[dataSourceID]" runat="server" 
   SelectMethod=" " 
   TypeName=" " 
   DataObjectTypeName=" ">
</asp:ObjectDataSource>

在此处查看如何正确填写 ObjectDataSource 属性。

然后将以下属性添加到您的 DropDownList:

<asp:DropDownList ID="DropDownList1" runat="server" 
   DataSourceID="[dataSourceID]"
   DataTextField="Grocery_Branch_Name"
   DataValueField="Grocery_Branch_No">

剩下的就是让您编写检索数据的方法。

2. 在 Page_Load 事件处理程序中手动输入列表

If (!Page.IsPostBack)
{
   List<GroceryBranch> allGroceryBranches = GetAllGroceryBranchesFromDB();
   DropDownList1.Items.Clear();
   DropDownList1.Items.AddRange(allGroceryBranches
    .Select(b=> new ListItem(b.Grocery_Branch_Name, b.Grocery_Branch_No))
}

但是您仍然缺少从数据库中检索数据的机制。


推荐阅读