function FillDropListByDataTable(response,dt) { if (response != null) { document.getElementById(dt).length=0; document.getElementById(dt).disabled=""; var ds = response; if(ds != null && typeof(ds) == "object" && ds.Tables != null) { var rowsCount= ds.Tables[0].Rows.length; if (rowsCount>0) { document.getElementById(dt).options.add(new Option("请选择","0")); for(var i=0; i<rowsCount; i++) { var name=ds.Tables[0].Rows[i]["ListName"]; var id=ds.Tables[0].Rows[i]["ListId"]; document.getElementById(dt).options.add(new Option(name,id)); } } else{ var name="无可选项"; var id="-1"; document.getElementById(dt).options.add(new Option(name,id)); document.getElementById(dt).disabled="disabled"; }
} } else { alert("传入的值为null"); } return }
updatepanel或者使用 ajax pro
把updatepanel放到模板页了,可是又出了这个错,是怎么回事?The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.
没搞定,杀生丸,那个我知道,可是用不了ScriptManager 这里总报错,因为模板页里有个ScriptManager ,所以这个也就不能在这个页面再加ScriptManager ,可是这个页面不加又报错The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it. 加了又报ScriptManager 只能用一个的错,我要死了
这个很好用的啊!我那这个很清楚了!都是很简单的!就是根据Id查询 绑定节点!方法还要吗?DataTableAreaManager---BLL /// <summary> /// 根据区的Id查询出区的信息 /// </summary> /// <param name="cid"></param> /// <returns></returns> public static DataTable GetDatSetAreaById(int cid) { return ias.GetDatSetAreaById(cid); } --CityManager //根据省份的外键PId查询出城市 public static DataTable GetDataSetCityById(int pid) { return fds.GetDataSetCityById(pid); } //根据省份的外键Pid统计城市 public static DataTable GetDataCityByCount(int Pid) { return fds.GetDataCityByCount(Pid); }ProvinceManager 省份 public static DataTable GetProvinceById(int pid) { return fds.GetDataSetProvinceById(pid); } public static DataTable GetDataSetProvinceAlls(string sqlWhere) { return fds.GetDataSetProvinceAlls(sqlWhere); } public static DataTable GetDataSetProvinceByCount(int Pid) { return fds.GetDataSetProvinceByCount(Pid); } DAL---------------------- AreaService---DAL #region 王璐璐 2010-7-27 15:02 /// <summary> /// 获得数据列表 /// </summary> public DataTable GetDatSetAreaById(int cid) { string sql = "select * from Area where cid=" + cid; return DBHelper.Query(sql).Tables[0]; } /// <summary> /// 统计区的数量 /// </summary> /// <param name="aid"></param> /// <returns></returns> public DataTable GetDataAreaByCount(int cid) { string sql = "select count(cid) from Area where cid" + cid; return DBHelper.Query(sql).Tables[0]; } #endregion--cityService #region 王璐璐 2010-7-27 15:02 /// <summary> /// 获得数据列表 /// </summary> public DataTable GetDataSetCityById(int pid) { string sql="select * from City where pid ="+pid;
return DBHelper.Query(sql).Tables[0]; } /// <summary> /// 根据城市Id查询统计区的数量 /// </summary> /// <param name="Pid"></param> /// <returns></returns> public DataTable GetDataCityByCount(int Pid) { string sql = "select count(CId) from City where pid =" + Pid; return DBHelper.Query(sql).Tables[0]; }--ProvinceService
#region 王璐璐 2010-7-27 15:02 public DataTable GetDataSetProvinceById(int pid) { string sql="select * from province where Pid ="+pid; return DBHelper.Query(sql).Tables[0]; } public DataTable GetDataSetProvinceAlls(string sqlWhere) { StringBuilder strSql = new StringBuilder(); strSql.Append(" select province.PId,province.[Name],collaborate.proid,count(proid) as cou from province inner join collaborate on(province.pID=" + "collaborate.proid) group by collaborate.proid,province.PId,province.[Name] order by cou desc"); if (sqlWhere.Trim()!= "") { strSql.Append("where " + sqlWhere); }
return DBHelper.Query(strSql.ToString()).Tables[0]; } /// <summary> /// 通过省份的Id家数 /// </summary> /// <param name="Pid"></param> /// <returns></returns> public DataTable GetDataSetProvinceByCount(int Pid) { string sql = "select count(Pid) from province where pid="+Pid; return DBHelper.Query(sql.ToString()).Tables[0]; } #endregion 在不会就呼死你!
方法都是自己写的!那个Datatable 人家教我的!刚学会!希望你帮助你!
如果jquery也不想用的话,那么只要把那个异步请求的用传统js异步请求就行了//创建异步对象 function createXMLHttpRequest1() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } //方法中用此请求 function send(){ createXMLHttpRequest1(); var queryString = "exeistsUserName.aspx?"; queryString = queryString + "UserName="+userName;
function changeCity(provinceID) { clearCityList(); var xmlDoc=xmlHttp.responseXML; var cityIDs=xmlDoc.getElementsByTagName("AreaID"); var citys=xmlDoc.getElementsByTagName("Name");
for(var i=0;i<citys.length;i++) { var cityID=cityIDs[i].firstChild.nodeValue; var city=citys[i].firstChild.nodeValue; var cityOption=new Option(city,cityID);
以上页面的关联后台代码: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;using System.Data.SqlClient;namespace LinkageList { /// <summary> /// WebForm1 的摘要说明。 /// </summary> public partial class DataBind : System.Web.UI.Page {
readycity.aspx.cs using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Xml; using System.Data.SqlClient;namespace LinkageList { /// <summary> /// ReadCity 的摘要说明。 /// </summary> public partial class ReadCity : System.Web.UI.Page { protected void Page_Load(object sender, System.EventArgs e) { int provinceID=Convert.ToInt32(this.Request["provinceID"].ToString()); this.Response.ContentType="text/xml"; this.WriteXmlDoc(provinceID); } private void WriteXmlDoc(int provinceID) { SqlConnection con=new SqlConnection("server=127.0.0.1;uid=sa;pwd=12345678;database=Address"); SqlCommand com=con.CreateCommand(); com.CommandText="select * from area where ParentID="+provinceID+""; SqlDataAdapter adpt=new SqlDataAdapter(); adpt.SelectCommand=com; DataSet ds=new DataSet(); con.Open(); try { adpt.Fill(ds); } catch(Exception ex) {
} finally { con.Close(); } ds.WriteXml(this.Response.OutputStream); this.Response.End(); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); }
{
get
{
if (_AdministrativeDivisionBll == null)
{
_AdministrativeDivisionBll = new AdministrativeDivisionBLL();
}
return _AdministrativeDivisionBll;
}
} //protected System.Web.UI.WebControls.DropDownList DropDownList1;
//protected System.Web.UI.WebControls.DropDownList DropDownList2;
//protected System.Web.UI.WebControls.TextBox TextBox1;
//protected System.Web.UI.WebControls.DropDownList DropDownList3; protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.DropDownList1.DataSource = this.AdministrativeDivisionBll.GetByAdministrativeLevel(1);
this.DropDownList1.DataTextField = "Name";
this.DropDownList1.DataValueField = "Id";
this.DropDownList1.DataBind(); this.DropDownList1.Attributes.Add("onclick", "cityResult();");
//this.DropDownList2.Attributes.Add("onclick", "areaResult();");
} } private void cityResult()
{
this.DropDownList2.DataSource = this.AdministrativeDivisionBll.GetByParent(Convert.ToInt32(this.DropDownList1.SelectedValue));
this.DropDownList2.DataTextField = "Name";
this.DropDownList2.DataValueField = "Id";
this.DropDownList2.DataBind();
}
把DropDownList控件都放在这个容器里就可以了
总之就是updatepanel
把DropDownList控件都放在这个容器里就可以了你先看看网上的级联是怎么做的 然后改成Ajax版本的
StringBuilder1.Append(",{");
StringBuilder1.AppendFormat("value:'{0}',text:'{1}'", pro.ID, pro.Name).ToString();
builder.Append("}");最后 context.Response.Write(StringBuilder1.ToString()); 返回!
$.getJSON("../ajax/GetJsonData.ashx", { type: "province" }, function(provinces) {
$.each(provinces.data, function(i, pro) {
var item = new Option(pro.text, pro.value);
$("#ddlProvince")[0].options.add(item)
})
});}---------------------
后台 string type = context.Request.QueryString["type"];记住 不要用服务器控件,用select 足够了。
可是我不加有提示什么ScriptManager 必须在updatepanel前,我都晕了
<ContentTemplate>
<asp:DropDownList ID="ddlProvinceList" runat="server" onselectedindexchanged="ddlProvinceList_SelectedIndexChanged" AutoPostBack="True" />
<asp:DropDownList ID="ddlCityList" runat="server" /><asp:CheckBox ID="chkSetLevel" runat="server" AutoPostBack="True" Text="不选城市" oncheckedchanged="chkSetLevel_CheckedChanged" />
</ContentTemplate>
</asp:UpdatePanel>这么着对吗?
办法是自己重新建一个ajax项目,然后把Web.config复制,然后粘贴到你原来的项目,呵呵!!
function FillDropListByDataTable(response,dt)
{
if (response != null)
{
document.getElementById(dt).length=0;
document.getElementById(dt).disabled="";
var ds = response;
if(ds != null && typeof(ds) == "object" && ds.Tables != null)
{
var rowsCount= ds.Tables[0].Rows.length;
if (rowsCount>0) {
document.getElementById(dt).options.add(new Option("请选择","0"));
for(var i=0; i<rowsCount; i++)
{
var name=ds.Tables[0].Rows[i]["ListName"];
var id=ds.Tables[0].Rows[i]["ListId"];
document.getElementById(dt).options.add(new Option(name,id));
}
}
else{
var name="无可选项";
var id="-1";
document.getElementById(dt).options.add(new Option(name,id));
document.getElementById(dt).disabled="disabled";
}
}
}
else
{
alert("传入的值为null");
}
return
}
<ScriptManager..属性></ScriptManager>
<div>你的DropDownList</div>
</form>
定义下拉改变事件,写代码
复杂点的用 JQUERY
给你一个简单的例子<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:DropDownList ID="DDprovince" runat="server" CssClass="btstyle" DataTextField="cityname" DataValueField="cityid" OnSelectedIndexChanged="DDprovince_Click" AutoPostBack="true">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:DropDownList ID="DDcity" runat="server" CssClass="btstyle" DataTextField="cityname" DataValueField="cityid">
<asp:ListItem Text="请选择" Value="0" Selected="True"></asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>这是前台的代码,后台没啥要求,希望对楼主有用
果然火了,网上课堂了。别人讲的再详细也要动手动脑的。你有两天思考的基础。
楼主好像是IDE基础不太好。别着急方法是对的慢慢调,别乱跑。
private void Bind()
{
//这里先获取所有省的信息
DataSet ds = bll.getUnitid();
//调用创建方法创建TreeView的根节点
CreateTreeView(TreeView1.Nodes, ds); }
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds)
{
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["unit"].ToString();
tnode.Value = dr["id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString(); //本来是递归调用方法,不过由于你的数据不是由一个字段来区分级数,所以得重新查询市的所有信息
// CreateTreeView(tnode.ChildNodes, ds);
DataSet ds1 = bll.getdepartment();
CreateTreeViewCnode(tnode.ChildNodes, ds1, dr["id"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr); } }
private void CreateTreeViewCnode(TreeNodeCollection nodes, DataSet ds, string unitid)
{
//定义筛选条件
string sql = string.Format("unit_id={0}", unitid);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["depart"].ToString();
tnode.Value = dr["id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法
DataSet ds1 = bll.getFirstdate();
CreateTreeViewCnodePolicedate(tnode.ChildNodes, ds1, dr["id"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
private void CreateTreeViewCnodePolicedate(TreeNodeCollection nodes, DataSet ds, string departid)
{
//定义筛选条件
string sql = string.Format("depart_id='{0}'", departid);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
string firstTime = Convert.ToDateTime(dr["firstdate"]).Year.ToString();
tnode.Text = firstTime + "着装";
tnode.Value = dr["firstdate"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
DataSet ds1 = bll.getPoliceinfo();
CreateTreeViewCnodePolice(tnode.ChildNodes, ds1, dr["firstdate"].ToString());
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
private void CreateTreeViewCnodePolice(TreeNodeCollection nodes, DataSet ds, string firstdate)
{
//定义筛选条件
string sql = string.Format("firstdate='{0}'", firstdate);
//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["name"].ToString();
tnode.Value = dr["police_id"].ToString();
//设置显示的路径
// tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法 //从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);
} }
加了又报ScriptManager 只能用一个的错,我要死了
首先问你是一个表还是分开的表 我那天
/// <summary>
/// 页面加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
//加载页面时,动态读取国家列表到DropList
CreateTree();
}
/// <summary>
/// 绑定生成一个有树结构的下拉菜单
/// </summary>
/// <param name="dtNodeSets">菜单记录数据所在的表</param>
/// <param name="strParentColumn">表中用于标记父记录的字段</param>
/// <param name="strRootValue">第一层记录的父记录值(通常设计为0或者-1或者Null)用来表示没有父记录</param>
/// <param name="strIndexColumn">索引字段,也就是放在DropDownList的Value里面的字段</param>
/// <param name="strTextColumn">显示文本字段,也就是放在DropDownList的Text里面的字段</param>
/// <param name="drpBind">需要绑定的DropDownList</param>
/// <param name="i">用来控制缩入量的值,请输入-1</param>
private void MakeTree(DataTable dtNodeSets, string strParentColumn, string strRootValue, string strIndexColumn, string strTextColumn, DropDownList drpBind, int i)
{
//每向下一层,多一个缩入单位
i++;
DataView dvNodeSets = new DataView(dtNodeSets);
dvNodeSets.RowFilter = strParentColumn + "=" + strRootValue;
string strPading = ""; //缩入字符
//通过i来控制缩入字符的长度,我这里设定的是一个全角的空格
for (int j = 0; j < i; j++)
strPading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了
foreach (DataRowView drv in dvNodeSets)
{
TreeNode tnNode = new TreeNode();
ListItem li = new ListItem(strPading + "├" + drv[strTextColumn].ToString(), drv[strIndexColumn].ToString());
drpBind.Items.Add(li);
MakeTree(dtNodeSets, strParentColumn, drv[strIndexColumn].ToString(), strIndexColumn, strTextColumn, drpBind, i);
}
//递归结束,要回到上一层,所以缩入量减少一个单位
i--;
}
/// <summary>
/// SQL语句查询,再绑定到DropList里面
/// </summary>
private void CreateTree()
{
//查询ZoneList
string sql = "SELECT *FROM Zone";
DataTable dt= DataAccess.GetDataSet(sql);
MakeTree(dt, "parentid", "0", "zone_id", "zonename_en", zone_id, -1);
} 别人告诉我一个方法!他们教我的!我也不会!今天 给你看看!
如果模板页里有,把这个删掉就行了,或者把模板页里的删掉,每个页面里都加一个ScriptManager
这是我自己能的!这是3个表 省 市 区 还有一个合作公司 collaborteProvince省份表
Id name ShenNo
城市表 City Cid name ShiNo Pid
市区表 AreaAId AName QuNo
/// <summary>
/// 绑定省市区三级TreeView
/// </summary>
/// <param name="StrSql"></param>
private void treebing()
{
DataTable dt = ProvinceManager.GetDataSetProvinceAlls("");
foreach (DataRow dr in dt.Rows)
{ //查询省份合作的家数
if (CollaborateManager.GetProvinceByCount(Convert.ToInt32(dr["PId"])) != 0)
{
TreeNode no = new TreeNode(dr["name"].ToString() + " (" + CollaborateManager.GetProvinceByCount(Convert.ToInt32(dr["PId"])) + "家)");
//Response.Write(da.Rows.Count);
ViewState["Pid"] = dr["PId"].ToString();//保存Pid
no.NavigateUrl = "Works.aspx?PId=" + dr["PId"].ToString();
TvProvince.Nodes.Add(no);//绑定省
no.SelectAction = TreeNodeSelectAction.Expand;
DataTable dt1 = CityManager.GetDataSetCityById(int.Parse(dr["Pid"].ToString()));
foreach (DataRow dr1 in dt1.Rows)
{
//查询城市合作的家数
if (CollaborateManager.GetCityByCount(Convert.ToInt32(dr1["CId"])) != 0)
{
TreeNode no1 = new TreeNode(dr1["name"].ToString() + " (" + CollaborateManager.GetCityByCount(Convert.ToInt32(dr1["CId"])) + "家)"); ViewState["CId"] = dr1["CId"].ToString();//保存Pid
no1.NavigateUrl = "Works.aspx?CId=" + dr1["CId"].ToString();
no.ChildNodes.Add(no1);//绑定城
no1.SelectAction = TreeNodeSelectAction.Expand; DataTable dt2 = AreaManager.GetDatSetAreaById(int.Parse(dr1["CId"].ToString()));
foreach (DataRow dr2 in dt2.Rows)
{
if (CollaborateManager.GetAreaByCount(Convert.ToInt32(dr2["AId"])) != 0)
{
TreeNode no2 = new TreeNode(dr2["Aname"].ToString() + "(" + CollaborateManager.GetAreaByCount(Convert.ToInt32(dr2["AId"])) + "家)");
no2.SelectAction = TreeNodeSelectAction.Expand;
ViewState["AId"] = dr2["AId"].ToString();//保存Pid
no2.NavigateUrl = "Works.aspx?AId=" + dr2["AId"].ToString();
no1.ChildNodes.Add(no2);//绑定区
}
}
}
}
}
}
TvProvince.CollapseAll();
}
省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例
http://blog.csdn.net/downmoon/archive/2010/06/15/5672563.aspx
先用updatepanle解决吧
然后在学着用ajax来做,用js,不会jQuery也行
1、到CSDN下个AjaxPro.2控件 放在你web的BIN目录下,添加引用
2、把这段代码加在web.config的system.web节点下
<httpHandlers>
<add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
</httpHandlers>
3、在你的后台文件中Page_Load方法中加入:AjaxPro.Utility.RegisterTypeForAjax(typeof(DropDownList)); DropDownList为你的页面的类名//注册AjaxPro控件
4、在你的第一个DropDownList绑定数据源事件中,当绑定数据源后(因为我们要获取第一个DropDownList的值传给第二个DropDownList)所以加上JS事件:
string basePartId = Dad2.SelectedValue;//获取第一个DropDownList的选中的值
if (basePartId != "")
{
Dad2.Attributes.Add("onchange", "showNext('Dad2','Son2')");}
//Dad2-第一个DropDownList的ID,Son2-第二个DropDownList的ID,showNext()前台JS函数即无刷新绑定DropDownList的函数.
5、给获取第二个DropDownList的数据集的方法标上[AjaxPro.AjaxMethod]//表示可以在前台调用后台的方法。eg:
[AjaxPro.AjaxMethod]
public IList<SonpartInfo> BindSon(string basePartId) //我用的是IList<>
{//这里为你通过传参数,返回得到第二个DropDownList的数据集的代码}
6、前台JS代码:给你代码范例
eg:
function showNext(sid1,sid2)
{
var sid1=document.getElementById(sid1).value; //获取第一个DropDownList的值,等下传给后台函数IList<SonpartInfo> BindSon(string basePartId)
var son=document.getElementById(sid2);
var val=DropDownList.BindSon(sid1).value;//调用后台函数 获取第二个DropDownList的数据集
if(val != null && typeof(val) == "object") //判断是否有数据
{
var valSum = val.length;
for(var i=0; i<valSum; i++)
{
var addoption=document.createElement("option");
addoption.text =val[i].Sonpartname; //SonpartInfo实体类的属性
addoption.value =val[i].Idx; //SonpartInfo实体类的属性
document.getElementById("Son2").add(addoption);
}
}
}
思路就是如上 你自己动手看下。
我现在也正在做一些基础的东西的整合
不过我的现在的框架是模仿petshop4.0的框架 看起来比较麻烦
如果楼主不闲看起来麻烦的话 我给你我的源码。
PS:需要引入jquery库
1,新建js文件,代码如下://设置市,选项function Setcity(ary)
{ //将获取的存储市名称及编码的字符串进行分离,//每个数组元素中存储一个市的名称及编码
var arycity = new Array();
arycity = ary.toString().split("|");
// var list = document.getElementById("ddlcity");
// list.options.length = 0;//清空ddlcity选项
$("#ddlcity").empty();
for(i=0;i<arycity.length-1;i++)
{//将数组arycity中的每个数组元素进行分离//分离出市的名称及市的编码
var citystr = null;
citystr = arycity[i];
var ary = new Array();
ary = citystr.toString().split(",");//新增dropdownlist的选项
var newoption = document.createElement("OPTION");
newoption.text = ary[0];
newoption.value= ary[1];
document.getElementById("ddlcity").options.add(newoption);
}
}//jquery异步调用City.ashx
$(document).ready(function(){$("#ddlProvince").change(function(){//参数传递的两种方法//1,var code = "procode=" + $("#ddlProvince").val();
//2,data:{procode:code},
//var code = "procode=" + $("#ddlProvince").val();
var code =$("#ddlProvince").val();
$.ajax({
type:"POST",
url:"City.ashx",
data:{procode:code},
success:Setcity
})
})})2,新建ashx文件,代码如下:public class City : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";//接收参数
string code = context.Request.Params["procode"].ToString().Trim();
//string strcity = GetCity(code);
//context.Response.Write("Hello World");
string stritem = GetCity(code);
context.Response.Write(stritem);
} public string GetCity(string procode)
{
List<YD.Model.City> citylist = new YD.BLL.City().GetList("*", " provinceId='"+procode+"'","name asc");
int length = citylist.Count;
string strary = "";
for (int i = 0; i < length; i++)
{
// strary[i] = citylist[i].name + "|" + citylist[i].code;
strary += citylist[i].name + "," + citylist[i].code + "|";
}
return strary;
}
public bool IsReusable {
get {
return false;
}
}}前台代码://记得引用jquery包<script src="../js/jquery-1.2.6.pack.js" type="text/javascript"></script><script src="Js/getCity.js" type="text/javascript"></script> <td>
<asp:DropDownList ID="ddlProvince" runat="server" CssClass="normal_sele">
</asp:DropDownList>
<asp:DropDownList ID="ddlcity" runat="server" CssClass="normal_sele">
</asp:DropDownList>
</td>
少东西 !你缺少这个吗?看看!
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>这你看看少吗?我上次就是少这个!
脚本function check1(val)
{
$.ajax({
type: "get",
url: "/user/User/NewCompanyTypeAjax.aspx?typeUp="+val+"&grade=2",
datatype : "json",
success: function(data, textStatus){
var arrids=new Array();
arrids=data.split('/');
load_Area_t(arrids);
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
//alert("complete");
},
error: function(){
//请求出错处理
alert("数据连接出错!");
}
});}
function load_Area_t(vals)
{
var ddlareat = document.getElementById('<%=ddlProductType2.ClientID %>');
for(var i=ddlareat.length;i>0;i--)
ddlareat.remove(ddlareat.options[i]);
var id="";
for(var i=0;i<vals.length-1;i++)
{
if(i==0)
{
id=vals[i].substring(0,vals[i].indexOf(','));
}
var y=document.createElement('option');
y.text=vals[i].substring(vals[i].indexOf(',')+1);
y.value=vals[i].substring(0,vals[i].indexOf(','));
ddlareat.add(y);
}
check2(id);
}function check2(val)
{
$.ajax({
type: "get",
url: "/user/User/NewCompanyTypeAjax.aspx?typeUp="+val+"&grade=3",
datatype : "json",
success: function(data, textStatus){
var arrids=new Array();
arrids=data.split('/');
load_Area_t2(arrids);
},
complete: function(XMLHttpRequest, textStatus){ },
error: function(){
//请求出错处理
alert("数据连接出错!");
}
});
}
function load_Area_t2(vals)
{
var ddlareat = document.getElementById('<%=ddlProductType3.ClientID %>');
for(var i=ddlareat.length;i>0;i--)
ddlareat.remove(ddlareat.options[i]);
for(var i=0;i<vals.length-1;i++)
{ var y=document.createElement('option');
y.text=vals[i].substring(vals[i].indexOf(',')+1);
y.value=vals[i].substring(0,vals[i].indexOf(','));
ddlareat.add(y);
}
}页面<asp:DropDownList ID="ddlProductType1" runat="server" CssClass="input300" onchange="check1(this.value)">
</asp:DropDownList> <asp:DropDownList ID="ddlProductType2" runat="server" CssClass="input300" onchange="check2(this.value)">
</asp:DropDownList>
<asp:DropDownList ID="ddlProductType3" runat="server" CssClass="input300" onchange="check3(this.value)">
</asp:DropDownList>
这个很好用的啊!我那这个很清楚了!都是很简单的!就是根据Id查询 绑定节点!方法还要吗?DataTableAreaManager---BLL
/// <summary>
/// 根据区的Id查询出区的信息
/// </summary>
/// <param name="cid"></param>
/// <returns></returns>
public static DataTable GetDatSetAreaById(int cid)
{
return ias.GetDatSetAreaById(cid);
}
--CityManager
//根据省份的外键PId查询出城市
public static DataTable GetDataSetCityById(int pid)
{
return fds.GetDataSetCityById(pid);
}
//根据省份的外键Pid统计城市
public static DataTable GetDataCityByCount(int Pid)
{
return fds.GetDataCityByCount(Pid);
}ProvinceManager 省份 public static DataTable GetProvinceById(int pid)
{
return fds.GetDataSetProvinceById(pid);
}
public static DataTable GetDataSetProvinceAlls(string sqlWhere)
{
return fds.GetDataSetProvinceAlls(sqlWhere);
}
public static DataTable GetDataSetProvinceByCount(int Pid)
{
return fds.GetDataSetProvinceByCount(Pid);
}
DAL----------------------
AreaService---DAL
#region 王璐璐 2010-7-27 15:02
/// <summary>
/// 获得数据列表
/// </summary>
public DataTable GetDatSetAreaById(int cid)
{ string sql = "select * from Area where cid=" + cid;
return DBHelper.Query(sql).Tables[0];
} /// <summary>
/// 统计区的数量
/// </summary>
/// <param name="aid"></param>
/// <returns></returns>
public DataTable GetDataAreaByCount(int cid)
{
string sql = "select count(cid) from Area where cid" + cid;
return DBHelper.Query(sql).Tables[0];
}
#endregion--cityService #region 王璐璐 2010-7-27 15:02
/// <summary>
/// 获得数据列表
/// </summary>
public DataTable GetDataSetCityById(int pid)
{
string sql="select * from City where pid ="+pid;
return DBHelper.Query(sql).Tables[0];
}
/// <summary>
/// 根据城市Id查询统计区的数量
/// </summary>
/// <param name="Pid"></param>
/// <returns></returns>
public DataTable GetDataCityByCount(int Pid)
{
string sql = "select count(CId) from City where pid =" + Pid; return DBHelper.Query(sql).Tables[0];
}--ProvinceService
#region 王璐璐 2010-7-27 15:02
public DataTable GetDataSetProvinceById(int pid)
{
string sql="select * from province where Pid ="+pid;
return DBHelper.Query(sql).Tables[0];
} public DataTable GetDataSetProvinceAlls(string sqlWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append(" select province.PId,province.[Name],collaborate.proid,count(proid) as cou from province inner join collaborate on(province.pID=" + "collaborate.proid) group by collaborate.proid,province.PId,province.[Name] order by cou desc");
if (sqlWhere.Trim()!= "")
{
strSql.Append("where " + sqlWhere);
}
return DBHelper.Query(strSql.ToString()).Tables[0];
} /// <summary>
/// 通过省份的Id家数
/// </summary>
/// <param name="Pid"></param>
/// <returns></returns>
public DataTable GetDataSetProvinceByCount(int Pid)
{
string sql = "select count(Pid) from province where pid="+Pid;
return DBHelper.Query(sql.ToString()).Tables[0];
}
#endregion
在不会就呼死你!
function createXMLHttpRequest1()
{ if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
//方法中用此请求
function send(){
createXMLHttpRequest1();
var queryString = "exeistsUserName.aspx?";
queryString = queryString + "UserName="+userName;
//方法 handleStateChange1 没有参数 直接使用方法名字引用
xmlHttp.onreadystatechange = handleStateChange1;
//如果 有参数就是 下面的例子:
//xmlHttp.onreadystatechange = function(){ handleStateChange1(参数)} xmlHttp.open("GET", queryString, true);
xmlHttp.send(null);
}
function handleStateChange1()
{
if(xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
var data =xmlHttp.responseText; }
}
}
我觉的应该是4个 省市区 3个 一个和省市区有关系的 表1个 一共4个!、
http://topic.csdn.net/u/20100723/13/91a7fc85-9212-47c7-90e4-5bc2e162fb1c.html
http://topic.csdn.net/u/20100722/13/8e759652-09b7-4c5f-b753-0814587355e2.html这2个贴子是我早几天问的!和你一样的! 你看看人家怎么说的!
天哪,没这么费劲吧,给你这么多列子了。顺便问好,PLMM
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<script type="text/javascript" language="javascript">
var xmlHttp;
var provinceID=0;
function createXmlHttp()
{
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
}
function startRequest(slcprovinceID)
{
createXmlHttp();
provinceID=slcprovinceID;
xmlHttp.onreadystatechange=readyStateHandler;
xmlHttp.open("POST",createQueryString(provinceID),true);
xmlHttp.send(null);
}
function readyStateHandler()
{
clearCityList();
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
changeCity(provinceID);
}
}
}
function changeCity(provinceID)
{
clearCityList();
var xmlDoc=xmlHttp.responseXML;
var cityIDs=xmlDoc.getElementsByTagName("AreaID");
var citys=xmlDoc.getElementsByTagName("Name");
for(var i=0;i<citys.length;i++)
{
var cityID=cityIDs[i].firstChild.nodeValue;
var city=citys[i].firstChild.nodeValue;
var cityOption=new Option(city,cityID);
document.forms[0].ddlCity.options.add(cityOption);
}
document.forms[0].ddlCity.options[0].selected=true;
}
function clearCityList()
{
var myOptions=document.forms[0].ddlCity.options;
for(var i=0;i<myOptions.length;i++)
{
document.forms[0].ddlCity.options[i]=null;
}
}
function createQueryString(provinceID)
{
var queryString="ReadCity.aspx?"+"provinceID="+provinceID;
return queryString;
}
</script>
<form id="Form1" method="post" runat="server">
<asp:Label Runat="server" ID="lblProvince">省份</asp:Label>
<asp:DropDownList Runat="server" ID="ddlProvince"></asp:DropDownList>
<asp:Label Runat="server" ID="lblCity">城市</asp:Label>
<asp:DropDownList Runat="server" ID="ddlCity"></asp:DropDownList>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;using System.Data.SqlClient;namespace LinkageList
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public partial class DataBind : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
this.BindDropDownList();
this.ddlProvince.Attributes.Add("onchange","startRequest(this.options[this.selectedIndex].value)");
}
else
{
this.ddlProvince.Attributes.Add("onchange","startRequest(this.options[this.selectedIndex].value)");
}
}
private void BindDropDownList()
{
SqlConnection con=new SqlConnection("server=127.0.0.1;uid=sa;pwd=12345678;database=Address");
SqlCommand com=con.CreateCommand();
com.CommandText="select * from area where ParentID=0"; SqlDataAdapter adpt=new SqlDataAdapter();
adpt.SelectCommand=com; DataSet ds=new DataSet(); con.Open();
try
{
adpt.Fill(ds);
}
catch(Exception ex)
{
}
finally
{
con.Close();
} this.ddlProvince.DataSource=ds;
this.ddlProvince.DataMember=ds.Tables[0].TableName;
this.ddlProvince.DataTextField="Name";
this.ddlProvince.DataValueField="AreaID";
this.ddlProvince.DataBind();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{ }
#endregion
protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
{ }
}
}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Data.SqlClient;namespace LinkageList
{
/// <summary>
/// ReadCity 的摘要说明。
/// </summary>
public partial class ReadCity : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
int provinceID=Convert.ToInt32(this.Request["provinceID"].ToString());
this.Response.ContentType="text/xml";
this.WriteXmlDoc(provinceID);
}
private void WriteXmlDoc(int provinceID)
{
SqlConnection con=new SqlConnection("server=127.0.0.1;uid=sa;pwd=12345678;database=Address");
SqlCommand com=con.CreateCommand();
com.CommandText="select * from area where ParentID="+provinceID+""; SqlDataAdapter adpt=new SqlDataAdapter();
adpt.SelectCommand=com; DataSet ds=new DataSet(); con.Open();
try
{
adpt.Fill(ds);
}
catch(Exception ex)
{
}
finally
{
con.Close();
} ds.WriteXml(this.Response.OutputStream);
this.Response.End();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{ }
#endregion
}
}
parentid既所属的省份的areaid
在MasterPage使用 <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> </asp:ScriptManagerProxy>
在ASPX页面使用 <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>
就可以了。
具体代码如下。请你根据自己的需要,稍作修改就可以用了。下面代码有两种方式 一种放在ASPX,一种在MasterPage.请根据自己需要。选择一种吧。aspx前台。
<%@ Page Title="" Language="C#" MasterPageFile="~/16/M/MasterPage1.master" AutoEventWireup="true" CodeFile="Default1.aspx.cs" Inherits="_16_M_Default1" %><asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" >
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:shinehouseConnectionString %>" ></asp:SqlDataSource></asp:Content>aspx页面后台: protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SqlDataSource1.SelectCommand = "SELECT * FROM [City] where Level=1";
DropDownList1.DataSource = SqlDataSource1;
DropDownList1.DataTextField = "Name";
DropDownList1.DataValueField = "ID";
DropDownList1.DataBind();
DropDownList1.AutoPostBack = true; }
DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged); }
public void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "SELECT * FROM [City] where ParentID=" + this.DropDownList1.SelectedValue;
DropDownList2.DataSource = SqlDataSource1;
DropDownList2.DataTextField = "Name";
DropDownList2.DataValueField = "ID";
DropDownList2.DataBind();
}
master 页面:<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage1.master.cs" Inherits="_16_M_MasterPage1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
<div>
<%=DateTime.Now.ToString() %>
</div> <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy> <asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" >
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:shinehouseConnectionString %>" ></asp:SqlDataSource>
</form>
</body>
</html>
master 后台: protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SqlDataSource1.SelectCommand = "SELECT * FROM [City] where Level=1";
DropDownList1.DataSource = SqlDataSource1;
DropDownList1.DataTextField = "Name";
DropDownList1.DataValueField = "ID";
DropDownList1.DataBind();
DropDownList1.AutoPostBack = true;
}
DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged); }
public void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataSource1.SelectCommand = "SELECT * FROM [City] where ParentID=" + this.DropDownList1.SelectedValue;
DropDownList2.DataSource = SqlDataSource1;
DropDownList2.DataTextField = "Name";
DropDownList2.DataValueField = "ID";
DropDownList2.DataBind();
}