数据库的有3个表,分别是城市表City(id,Cname,Cid),县区表Area(id,Cid,areaname,areanum),还有一个录入的表ZRMX
(zrdm, , ,),其中城市表Cid和县区表Cid相关联,录入表中的zrdm代表县区表里的areanum(县区的代码)我想在录入的表单上做一个市县两级联动的下拉列表框,选择某个城市的某个县以后,点击提交按钮将这个县的代码
插入到ZRMX表中,我参考了一下别人的代码,运行时发现了些问题:
1:第一次运行时,城市下拉框显示的是第一个城市,县区显示的是第二个城市包含的县区,选择其他城市以后就显示正常   了,请问是什么原因
2:我想将所选县区的代码和名称插入到ZRMX表中,我考虑要下拉框的value属性代码县区代码,text属性代表名称,请问   怎么写(我会将我写的代码写在下面,请改正!)
页面代码为:
<script> 
function load(state){ 
var drp2 = document.getElementById("dListChild"); 
for (i = drp2.length; i >= 0; i--){ 
drp2.options.remove(i); 
}var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP"); 
var oDoc = new ActiveXObject("MSXML2.DOMDocument"); oHttpReq.open("POST", "getData.aspx?state="+state, false); 
oHttpReq.send(""); 
result = oHttpReq.responseText; 
oDoc.loadXML(result); 
items1 = oDoc.selectNodes("//Area/Table/areanum"); 
items2 = oDoc.selectNodes("//Area/Table/areaname"); var itemsLength=items1.length; 
  for(i=0;i<itemsLength;i++) //将小类的类名和编号赋予dListChild
  { 
  var newOption = document.createElement("OPTION"); 
  newOption.text=items2[i].text; 
  newOption.value=items1[i].text; 
  drp2.options.add(newOption); 
  } 

window.onload = function(){load('1');} </script>
后台.cs代码为
    private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strconn= ConfigurationSettings.AppSettings["dsn"];
//连接本地计算机的ProvinceZY数据库
SqlConnection cn0= new SqlConnection (strconn);
if(!IsPostBack)
      {
//城市名称下拉列表框绑定
cn0.Open ();
string mysql1="select * from City ";
SqlDataAdapter da = new SqlDataAdapter(mysql1,cn0);
DataSet ds = new DataSet();
da.Fill(ds);
this.dListParent.DataSource = ds;
this.dListParent.DataTextField = "Cname";
this.dListParent.DataValueField = "Cid";
this.dListParent.DataBind();
// 这里是绑定客户端事件,当第一个DropDownList的选项改变时激发下面的事件onchange,这个事件将调用一个客户端方法load()
this.dListParent.Attributes.Add("onchange","load(this.options[this.selectedIndex].value)");
}
              cn0.Close ();
          }private void btn_submit_Click(object sender, System.EventArgs e)
{
if(Page.IsValid )
{
string strconn= ConfigurationSettings.AppSettings["dsn"];
SqlConnection cn= new SqlConnection (strconn);
cn.Open();

string strsql="insert into ZRMX(zcdm,zcmc,zrdm,zrmc,xm,grdm,id,zrsj,zrje) values(@zcdm,@zcmc,'321099','扬州市市本级',@xm,@zcgrdm,@id,@zrsj,@zrje) ";
SqlCommand cm=new SqlCommand(strsql,cn);
cm.Parameters.Add(new SqlParameter("@zcdm",SqlDbType.VarChar,50));
cm.Parameters["@zcdm"].Value=dListChild.SelectedItem.Value;
cm.Parameters.Add(new SqlParameter("@zcmc",SqlDbType.VarChar,50));
cm.Parameters["@zcmc"].Value=dListChild.SelectedItem.Text;
cm.Parameters.Add(new SqlParameter("@xm",SqlDbType.VarChar,50));
cm.Parameters["@xm"].Value=tbx_xm.Text;
cm.Parameters.Add(new SqlParameter("@zcgrdm",SqlDbType.VarChar,50));
cm.Parameters["@zcgrdm"].Value=tbx_zcgrdm.Text;
cm.Parameters.Add(new SqlParameter("@id",SqlDbType.VarChar,50));
cm.Parameters["@id"].Value=tbx_id.Text;
cm.Parameters.Add(new SqlParameter("@zrsj",SqlDbType.VarChar,50));
cm.Parameters["@zrsj"].Value=DateTime.Now.ToString("yyyyMMdd");
cm.Parameters.Add(new SqlParameter("@zrje",SqlDbType.Float));
cm.Parameters["@zrje"].Value=Convert.ToDouble(tbx_money.Text);
try
{
cm.ExecuteNonQuery();
Lbl_note.Text="录入成功";

}
catch(SqlException)
{
Lbl_note.Text="录入失败";
Lbl_note.Style["color"]="red";
}
cn.Close(); }
}
private void dListParent_SelectedIndexChanged(object sender, System.EventArgs e)
{

}
getdata源文件 
namespace ProvinceZY
{
/// <summary>
/// GetData 的摘要说明。
/// </summary>
public class GetData : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// 在此处放置用户代码以初始化页面
//Response.Write(Request["state"]);
int cityNo=int.Parse(Request["state"].ToString());   
string strconn= ConfigurationSettings.AppSettings["dsn"];
SqlConnection cn= new SqlConnection (strconn);
cn.Open();
string mysql="select * from Area where Cid='"+cityNo+"'";
SqlDataAdapter da = new SqlDataAdapter(mysql,cn);
DataSet ds = new DataSet("Area");
da.Fill(ds);  XmlTextWriter writer = new XmlTextWriter(Response.OutputStream,Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
writer.IndentChar = ' ';
writer.WriteStartDocument();
ds.WriteXml(writer);
writer.Flush();
Response.End();
writer.Close();   
cn.Close();
}
}
}

解决方案 »

  1.   

    在给县区dropdownlist加载数据时,应根据城市的dropdownlist值来加载相应的数据
      

  2.   

    绑定数据上都没错吧,只是第一次绑定城市下拉框时就绑定所有城市,而县 下拉框没必要绑数据,只有城市下拉框选择某一城市后再Onchange事件里绑定城市对应的县,要不就失去了联动的意义了。
    至于第二个问题 怎么绑定? 下拉框的属性里面有属性进行设置 field 绑数据源里面的字段或值
      

  3.   

    不好意思,我没问题说清楚~~第一次运行的时候第一个下拉框数据都绑定了
    默认显示是城市表第一条数据,而第二个下拉框才执行时是没有数据,页面打开到一半就显示
    城市表第二条数据对应的县区,如果这时候再选择其他城市就恢复正常了!第二个问题我写的
    cm.Parameters.Add(new   SqlParameter("@zcdm",SqlDbType.VarChar,50)); 
    cm.Parameters["@zcdm"].Value=dListChild.SelectedItem.Value; 
    cm.Parameters.Add(new   SqlParameter("@zcmc",SqlDbType.VarChar,50)); 
    cm.Parameters["@zcmc"].Value=dListChild.SelectedItem.Text; 
    取不到第二个下拉框的value和text值有什么好办法呢,最后能在我原来的代码上改~~谢谢~~~~~~~~
      

  4.   

    在BODY里面的onload事件先执行一次load函数
      

  5.   

    向这种省市已经大部分开始使用ajax无刷新联动了
    很少使用刷新联动了
      

  6.   

    算了给你个思路吧,
    建意你先写给那两个联动赋值为"请选择"
    然后当点击第一个DropDownList1的时候去处发第一个的DropDownList1_SelectedIndexChanged事件,
    然后,在这个事件中根据DropDownList1获取的值进行区县的选择将数据放入DropDownList2
    加一条IF判别一下,看看DropDownList1的值是不是初值如果是,对DropDownList2清空项写入默认的值,
    如果DropDownList1选取别的城市就重新执行这个事件中根据DropDownList1获取的值进行区县的选择将数据放入DropDownList2,
    这样只要先绑定了DropDownList1就可以实现了
      

  7.   

     case "黑龙江":
    {
    int i = 0;
    shi.Items.Add("哈尔滨"); shi.Items[i++].Text = "哈尔滨"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("齐齐哈尔"); shi.Items[i++].Text = "齐齐哈尔"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("牡丹江"); shi.Items[i++].Text = "牡丹江"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("佳木斯"); shi.Items[i++].Text = "佳木斯"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("绥化"); shi.Items[i++].Text = "绥化"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("黑河"); shi.Items[i++].Text = "黑河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("呼玛"); shi.Items[i++].Text = "呼玛"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("漠河"); shi.Items[i++].Text = "漠河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("塔河"); shi.Items[i++].Text = "塔河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("加格达奇"); shi.Items[i++].Text = "加格达奇"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("伊春"); shi.Items[i++].Text = "伊春"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("大庆"); shi.Items[i++].Text = "大庆"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("通河"); shi.Items[i++].Text = "通河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("阿城"); shi.Items[i++].Text = "阿城"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("尚志"); shi.Items[i++].Text = "尚志"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("延寿"); shi.Items[i++].Text = "延寿"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("双城"); shi.Items[i++].Text = "双城"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("肇东"); shi.Items[i++].Text = "肇东"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("鸡西"); shi.Items[i++].Text = "鸡西"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("鹤岗"); shi.Items[i++].Text = "鹤岗"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("双鸭山"); shi.Items[i++].Text = "双鸭山"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("林甸"); shi.Items[i++].Text = "林甸"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("克山"); shi.Items[i++].Text = "克山"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("拜泉"); shi.Items[i++].Text = "拜泉"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("依安"); shi.Items[i++].Text = "依安"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("龙江"); shi.Items[i++].Text = "龙江"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("讷河"); shi.Items[i++].Text = "讷河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("泰来"); shi.Items[i++].Text = "泰来"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("泰康"); shi.Items[i++].Text = "泰康"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("甘南"); shi.Items[i++].Text = "甘南"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("富裕"); shi.Items[i++].Text = "富裕"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("友谊"); shi.Items[i++].Text = "友谊"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("鸡东"); shi.Items[i++].Text = "鸡东"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("密山"); shi.Items[i++].Text = "密山"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("林口"); shi.Items[i++].Text = "林口"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("穆棱"); shi.Items[i++].Text = "穆棱"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("东宁"); shi.Items[i++].Text = "东宁"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("海林"); shi.Items[i++].Text = "海林"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("宁安"); shi.Items[i++].Text = "宁安"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("绥芬河"); shi.Items[i++].Text = "绥芬河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("虎林"); shi.Items[i++].Text = "虎林"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("七台河"); shi.Items[i++].Text = "七台河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("勃利"); shi.Items[i++].Text = "勃利"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("桦川"); shi.Items[i++].Text = "桦川"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("汤原"); shi.Items[i++].Text = "汤原"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("依兰"); shi.Items[i++].Text = "依兰"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("萝北"); shi.Items[i++].Text = "萝北"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("宝清"); shi.Items[i++].Text = "宝清"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("桦南"); shi.Items[i++].Text = "桦南"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("饶河"); shi.Items[i++].Text = "饶河"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("集贤"); shi.Items[i++].Text = "集贤"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("明水"); shi.Items[i++].Text = "明水"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("庆安"); shi.Items[i++].Text = "庆安"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("海伦"); shi.Items[i++].Text = "海伦"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("安达"); shi.Items[i++].Text = "安达"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("肇州"); shi.Items[i++].Text = "肇州"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("肇源"); shi.Items[i++].Text = "肇源"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("绥棱"); shi.Items[i++].Text = "绥棱"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("望奎"); shi.Items[i++].Text = "望奎"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("兰西"); shi.Items[i++].Text = "兰西"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("青冈"); shi.Items[i++].Text = "青冈"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("绥宾"); shi.Items[i++].Text = "绥宾"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("北安"); shi.Items[i++].Text = "北安"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("孙吴"); shi.Items[i++].Text = "孙吴"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("逊克"); shi.Items[i++].Text = "逊克"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("德都"); shi.Items[i++].Text = "德都"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
     shi.Items.Add("嫩江"); shi.Items[i++].Text = "嫩江"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("呼兰"); shi.Items[i++].Text = "呼兰"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
    shi.Items.Add("富锦"); shi.Items[i++].Text = "富锦"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
      shi.Items.Add("克东"); shi.Items[i++].Text = "克东"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
        shi.Items.Add("抚远"); shi.Items[i++].Text = "抚远"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
       shi.Items.Add("宾县"); shi.Items[i++].Text = "宾县"; shi.Items[i - 1].Value = Convert.ToString(i - 1);
      shi.Items.Add("木兰"); shi.Items[i++].Text = "木兰"; shi.Items[i - 1].Value = Convert.ToString(i - 1);break;
    }
      

  8.   

    http://www.cnblogs.com/netboy/archive/2006/03/03/341778.html
    无刷新的,我记得用到了ws,但是完全可以用一个隐藏的aspx页面实现。
      

  9.   

    没怎么很仔细的去看楼主的代码,好象就是一个隐藏页面实现的.那么可以在BODY里面的onload事件先执行一次load函数
    这样每次加载页面都是可以是你默认的城市和县区
      

  10.   

    第二个下拉列表框的value属性和text属性在后台怎么取到然后插入数据表中啊啊我用了
    dListChild.SelectedItem.Value
    dListChild.SelectedItem.Text
    但是取不到,好象需要用到request.form,请教一下,谢谢!!!
      

  11.   

    没什么技术难度阿,你就取到第一个城市然后绑定县就好了阿;至于是否使用ajax,看个人爱好了
      

  12.   

    数据库里面使用表存储数据就行了
    1(省)对N(市)的关系,N(市)与N(县)关系
    绑定的时候 读一个值出来就行了!
      

  13.   

    我只说三句话,包括上面那句,我的话完了!
    ----------------------------------
    有意思啊!
    ---------------------------------
    无刷新联动,提供两个网址
    http://www.cnblogs.com/singlepine/archive/2005/10/19/257954.html
    http://www.cnweblog.com/maomao2008/archive/2007/01/05/195112.html
      

  14.   

    麻烦在我原基础上改动,我想要的是代码,那个小山的ajax的三级联动我已经拜读过了
    主要是别的已经差不多了,不想再做大改动了
    我这个是用的老办法js+xmhttp
    犹豫是新手的关系,请帮我看看怎么取到第2个下拉框的value和text值,代码加哪
    解决了就给分,万分感谢!!
      

  15.   

    取value
    document.getElementById("select1").options[document.getElementById("select1").selectedIndex].value
    取text
    document.getElementById("select1").options[document.getElementById("select1").selectedIndex].text (我不确定,可以试一下)
    或者
    document.getElementById("select1").options[document.getElementById("select1").selectedIndex].innerHTMLup
      

  16.   

    http://www.code-studio.net/CSView.aspx?aid=252
    参考一下吧.用WebService实现的.
      

  17.   

    我用cm.Parameters["@zcdm"].Value=this.Request.Form["dListChild"].ToString();
    可以取到第2个下拉框的value值,怎么取text值?解决了就散分!!!
      

  18.   

    下拉控件 我怎么得到它text的值然后赋值给一参数 
    value值可以用Request()得到 this.Request.Form["dListChild"].ToString();