我的项目在asp.net的webform1中包含一个文本框和一个保存 按钮,当用户在文本框中输入某个国家/地区名称时,它应该 单击“保存”按钮,名称应该保存在名为的数据库表中 国家。 然后在webform2中,保存的国家/地区应该在页面加载时加载到下拉列表中,然后应该有一些用户将使用的文本框 在下拉列表中输入所选国家/地区的州, 最后在webform3国家/地区加载下拉列表,当用户选择一个国家/地区时,它应该在另一个国家/地区加载该国家/地区的状态 下拉列表以及当用户从第二个下拉列表中选择状态时 进入该州的城市,它应该被保存在数据库中 单击保存按钮。 我遇到问题,当我运行webform2时,国家/地区被加载到下拉列表1但是当我选择一个国家时它不加载 dropdownlist2中该国家/地区的州。 任何帮助? 到目前为止,这是我的代码,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
namespace assign1 {
public partial class city: System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack == false) {
SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("SELECT CName,CID FROM country", conn);
DataTable dt = new DataTable();
da.Fill(dt);
ddlCountry.DataSource = dt;
ddlCountry.DataTextField = "CName";
ddlCountry.DataValueField = "CID";
ddlCountry.DataBind();
}
}
protected void btnSave_Click(object sender, EventArgs e) {
SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
SqlCommand cmd = new SqlCommand("INSERT INTO city(CIName,SID,CID) Values('" + txtCity.Text + "','" + ddlState.SelectedIndex + "','" + ddlCountry.SelectedIndex + "')", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e) {
/* SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("SELECT SName,SID FROM state", conn);
DataTable dt = new DataTable();
da.Fill(dt);
ddlState.DataSource = dt;
ddlState.DataTextField = "SName";
ddlState.DataValueField = "SID";
ddlState.DataBind(); */
}
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e) {
SqlConnection conn = new SqlConnection("Data Source = HAFIZ_HARRON; Database = 7thSemester; Integrated Security = true");
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("SELECT SName,SID FROM state", conn);
DataTable dt = new DataTable();
da.Fill(dt);
ddlState.DataSource = dt;
ddlState.DataTextField = "SName";
ddlState.DataValueField = "SID";
ddlState.DataBind();
}
}
}
----------
答案 0 :(得分:2)
当您收到ddlCountry_SelectedIndexChanged
时,您需要准备一个查询,该查询仅选择属于所选当前国家/地区的状态。
所以你的代码应该是
protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
using(SqlConnection conn = new SqlConnection(.....))
using(SqlDataAdapter da = new SqlDataAdapter())
{
string cmdText = @"SELECT SName,SID FROM state WHERE CID=@country";
da.SelectCommand = new SqlCommand(cmdText, conn);
da.SelectCommand.Parameters.Add("@country", SqlDbType.Int).Value = ddlCountry.SelectedValue;
DataTable dt = new DataTable();
da.Fill(dt);
ddlState.DataSource = dt;
ddlState.DataTextField = "SName";
ddlState.DataValueField = "SID";
ddlState.DataBind();
}
}
此处查询文本不是构建串联字符串,而是使用参数占位符(WHERE CID = @ country)然后添加精确数据类型所需的参数(我假设一个整数)到SelectCommand的Parameters集合。
关于using语句的几句话。这是使用一次性物体的优选方式,因为使用块确保在离开块时放置物体。
最后,您的连接字符串应存储在web.config文件中,否则,如果您需要更改此字符串的任何详细信息,则必须搜索应用中您硬编码该字符串的每个位置< / p>
答案 1 :(得分:0)
您可以使用ASP.NET的ajax更新面板 它会彻底解决问题 在触发器中,您可以指定所选索引已更改事件