c# - 选择下拉列表时,它应该显示表中列的值..如何实现?
问题描述
首先我创建了一个表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>
</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
,那么如果提供正确的语法解决方案,那将非常有帮助。
解决方案
问题是您没有向下拉列表提供任何数据。在 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))
}
但是您仍然缺少从数据库中检索数据的机制。
推荐阅读
- oracle - 如何根据参数在不同的表上进行选择?
- python - 如何在 Django 表单中拆分多个选择?
- php - 从数组中获取响应变量
- java - Apache CXF java2wsdl:自定义符号名称
- webpack - Webpack 别名问题
- r - 基于第二列递增列
- java - 将参数添加到从命令行调用的 Maven Enforcer Rules
- node.js - Openshift:身份验证失败,私有 GitLab 存储库作为依赖项
- assembly - mingw-w64 纯汇编代码,没有额外(冗余)信息
- python - MongoDB:使用 PyMongo 从 mongoexport 解析文件