两个联动
1\分类
2\城市地区从是从表中读出来的,原理一样.不知道为什么??

解决方案 »

  1.   

    初始化语句写到ispostback里面了么?
      

  2.   

    写了,两个DropDownList是不是要放在ispostback外
      

  3.   

    楼主代码是不是一个写好了,然后直接复制粘贴另外一个?
    如果是的话检查一下函数名字后面的handles控件是不是忘记改名了
    我经常是后面都是handles dropdownlist1
      

  4.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(Request.Cookies["Admin_ID"]==null)
    {
    Response.Redirect("../ManagerLogin.aspx");
    Response.End();
    }
    ReWriteScript();
    DataBinds(ClassID,NclassID,"sp_GetClass","Sp_GetNclassBYclassID");  
    ReWriteScriptProvince();
    DataBinds(ProvinceID,CityID,"sp_GetClassProvince","Sp_GetNclassBYclassIDProvince");
    if(!Page.IsPostBack)

    Config config=new Config();
    config.BindControl("唐代,宋代","唐代,宋代",Years);
    config.BindControl("1W-2W,2W-3W","1W-2W,2W-3W",Price);
    }
    }------------------------------------------------------------------
    private void ReWriteScript()
    {
    int countP=0;
    string scriptStringP="<Script Language=JavaScript>\n var onecountP;";
    scriptStringP +="\nonecountP=0;";
    scriptStringP +="\nsubcatP=new Array();";
    SqlDataReader rs1=register.GetNclass(CommandType.StoredProcedure,"sp_GetNClass");
    while(rs1.Read())
    {
    scriptStringP +="\n subcatP["+countP+"]=new Array("+"'"+rs1["ColumnName"]+"'"+","+"'"+rs1["ColumnParentID"]+"'"+","+"'"+rs1["ColumnID"]+"'"+");";
    countP++;
    }
    rs1.Close();
    scriptStringP +="\n onecountP="+countP+";";
    scriptStringP +="\n function changelocation(locationid){";
    scriptStringP +="\n document.Form1.NclassID.length = 0;";
    scriptStringP +="\n var locationid=locationid;";
    scriptStringP +="\n var Z;";
    scriptStringP +="\n for(Z=0; Z<onecountP; Z++){";
    scriptStringP +="\n if(subcatP[Z][1]==locationid){";
    scriptStringP +="\n document.Form1.NclassID.options[document.Form1.NclassID.length]=new Option(subcatP[Z][0],subcatP[Z][2]);";
    scriptStringP +="\n }";
    scriptStringP +="\n }";
    scriptStringP +="\n }";
    scriptStringP +="<";
    scriptStringP +="/";
    scriptStringP +="script>";
    if(!this.IsClientScriptBlockRegistered("clientScript"))            
    {
    this.RegisterClientScriptBlock("clientScript",scriptStringP);
    }
    }-------------------------------------------------------------------------------
    private void ReWriteScriptProvince()
    {
    int count=0;
    string scriptString="<Script Language=JavaScript>\n var onecount;";
    scriptString +="\nonecount=0;";
    scriptString +="\nsubcat=new Array();";
    SqlDataReader rs=register.GetNclass(CommandType.StoredProcedure,"sp_GetNClassProvince");
    while(rs.Read())
    {
    scriptString +="\n subcat["+count+"]=new Array("+"'"+rs["ColumnName"]+"'"+","+"'"+rs["ColumnParentID"]+"'"+","+"'"+rs["ColumnID"]+"'"+");";
    count++;
    }
    rs.Close();
    scriptString +="\n onecount="+count+";";
    scriptString +="\n function changelocationProvince(locationid){";
    scriptString +="\n document.Form1.CityID.length = 0;";
    scriptString +="\n var locationid=locationid;";
    scriptString +="\n var i;";
    scriptString +="\n for(i=0; i<onecount; i++){";
    scriptString +="\n if(subcat[i][1]==locationid){";
    scriptString +="\n document.Form1.CityID.options[document.Form1.CityID.length]=new Option(subcat[i][0],subcat[i][2]);";
    scriptString +="\n }";
    scriptString +="\n }";
    scriptString +="\n }";
    scriptString +="<";
    scriptString +="/";
    scriptString +="script>";
    if(!this.IsClientScriptBlockRegistered("clientScript"))            
    {
    this.RegisterClientScriptBlock("clientScript",scriptString);
    }
    } private void DataBinds(DropDownList BClass,DropDownList SClass,string sp1,string sp2)
    {
    DataTable dt=register.Getclass("Getclass",CommandType.StoredProcedure,sp1).Tables[0];  //获得大类列表
    BClass.DataSource=dt;
    BClass.DataTextField="ColumnName";
    BClass.DataValueField="ColumnID";
    BClass.DataBind();
                
    DataTable dtn=register.Getnclass(int.Parse(BClass.SelectedItem.Value),sp2).Tables[0]; //根据大类列表默认选中项读出所属的小类列表
    SClass.DataSource=dtn;
    SClass.DataTextField="ColumnName";
    SClass.DataValueField="ColumnID";
    SClass.DataBind();

                
    }
      

  5.   

    代码应该是没有问题!
    问题出在:
    DataTable dt=register.Getclass("Getclass",CommandType.StoredProcedure,sp1).Tables[0];  //获得大类列表
    跟:
    DataTable dtn=register.Getnclass(int.Parse(BClass.SelectedItem.Value),sp2).Tables[0]; //根据大类列表默认选中项读出所属的小类列表
    中.
    你把你的.Tables[0]换成.Tables["表名"]就可以了.
    你的问题是你的DataSet中执行了上一个联动而没有及时释放掉,所以单个就ok两个就不行了.