仿照http://www.cnblogs.com/asboy/archive/2007/05/05/ajaxpro.html做了个类似的功能,发觉ajax的功能的确满有趣的,不过这段代码还存在一个问题是不能省只能改变市,而后面的地区不会跟着变化,还有待改进。
先在web.config中添加<system.web>
<!--for Ajaxnet-->
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
<!--其他设置-->
</system.web>
然后去ajax中国下一个ajax.2.dll当时找到了两个,我后来只用了这个,另一个有待看过blog的人去试验,这里关键是要把自己的class文件把在aspx前的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="regFillIn.aspx.cs" Inherits="_Default" %>
而这里_Default是注册的类,看了很多这样的资料才发觉这样一个问题,否则会跟踪进去.
里面代码如下,我把从sql语句生成Dataset做成了commontools里的一个方法,方便重用.
/**/
/// <summary>
/// 数据绑定
/// </summary>
private
void
BindDc()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
CommonTools.FuncDB FuncDB = new CommonTools.FuncDB();
CommonTools.Common.sCon = "server=.;User ID=sa;Password=wanglin;database=OnlineSuscribeSystem;Connection Reset=FALSE";
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//第一个Ddl
string sql = @"select * from Area where parentid=0";
DdlProvince.DataSource = FuncDB.getDataSet(sql);
DdlProvince.DataTextField = "CityName";
DdlProvince.DataValueField = "Id";
DdlProvince.DataBind();
if (DdlProvince.DataSource != null) DdlProvince.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'DdlCity')");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//第二个Ddl
if (DdlProvince.SelectedItem != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
sql = @"select * from Area where Parentid=" + DdlProvince.SelectedItem.Value;
DdlCity.DataSource = FuncDB.getDataSet(sql);
DdlCity.DataTextField = "CityName";
DdlCity.DataValueField = "Id";
DdlCity.DataBind();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//第三个
if (DdlCity.SelectedItem != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (DdlCity.DataSource != null) DdlCity.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'DdlArea')");
sql = @"select * from Area where parentid=" + DdlCity.SelectedItem.Value;
DdlArea.DataSource = FuncDB.getDataSet(sql);
DdlArea.DataTextField = "CityName";
DdlArea.DataValueField = "id";
DdlArea.DataBind();
}
}
[AjaxPro.AjaxMethod]
public
DataSet getNextClass(
string
cid)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
CommonTools.FuncDB FuncDB = new CommonTools.FuncDB();
CommonTools.Common.sCon = "server=.;User ID=sa;Password=wanglin;database=OnlineSuscribeSystem;Connection Reset=FALSE";
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
string sql = @"select CityName as txt,Id as vol from Area where Parentid=" + cid;
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return FuncDB.getDataSet(sql);
}
catch
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return null;
}
}
其中的FuncDB.getDataset(sql) 放在另一个文件,类文件如下:
public
class
FuncDB
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
SqlConnection cn;
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
定义数据库操作不带参数的函数#region 定义数据库操作不带参数的函数
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 打开数据库连接.
/// </summary>
private void Open()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
// 打开数据库连接
if (cn == null) cn = new SqlConnection(CommonTools.Common.sCon);
if (cn.State == System.Data.ConnectionState.Closed) cn.Open();
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 关闭数据库连接
/// </summary>
public void Close()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (cn != null) cn.Close();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 释放资源
/// </summary>
public void Dispose()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
// 确认连接是否已经关闭
if (cn != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Dispose();
cn = null;
}
}
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
定义数据库操作带参数的函数#region 定义数据库操作带参数的函数
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 定义数据库操作带参数的函数
/// </summary>
/// <param name="cn"></param>
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public void Open(SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (cn == null || cn.State == System.Data.ConnectionState.Closed)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Open();
}
}
public void Dispose(SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (cn != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (cn.State == System.Data.ConnectionState.Open) ...{ cn.Close(); }
cn.Dispose();
cn = null;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public void Close(SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (cn != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(cn.State==System.Data.ConnectionState.Open)...{cn.Close();}
}
}
#endregion
public System.Boolean executeQuery(string sqlString,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Open();
System.Data.SqlClient.SqlCommand myCommand=new System.Data.SqlClient.SqlCommand(sqlString,cn);
myCommand.ExecuteNonQuery();
cn.Close();
return true;
}
catch(SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Close();
LogManager.WriteError( ex.Message + " " + ex.StackTrace );
return false;
}
}
public string sqlEncode(string sqlItem)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return System.Text.RegularExpressions.Regex.Replace(sqlItem,"'","''");
}
public bool getData(System.Data.DataSet ResultSet,string sourcetable,string sqlString,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Data.SqlClient.SqlDataAdapter myAdapter=new System.Data.SqlClient.SqlDataAdapter();
myAdapter.SelectCommand=new System.Data.SqlClient.SqlCommand(sqlString,cn);
myAdapter.Fill(ResultSet,sourcetable);
myAdapter.Dispose();
return true;
}
catch(SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError( ex.Message + " " + ex.StackTrace );
return false;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public bool getData(System.Data.DataSet ResultSet,string sourcetable,string sqlString,int StartIndex,int MaxRecord,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Data.SqlClient.SqlDataAdapter myAdapter=new System.Data.SqlClient.SqlDataAdapter();
myAdapter.SelectCommand=new System.Data.SqlClient.SqlCommand(sqlString,cn);
myAdapter.Fill(ResultSet,StartIndex,MaxRecord,sourcetable);
myAdapter.Dispose();
return true;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
catch(SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError( ex.Message + " " + ex.StackTrace );
return false;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public bool getData(string sqlString,SqlConnection cn,out SqlDataReader dataReader)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Open();
System.Data.SqlClient.SqlCommand myCommand=new System.Data.SqlClient.SqlCommand(sqlString,cn);
myCommand.CommandText=sqlString;
dataReader=myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
myCommand.Dispose();
return true;
}
catch(SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError( ex.Message + " " + ex.StackTrace );
dataReader=null;
return false;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public SqlDataReader getDataReader(string sqlString,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
SqlDataReader dataReader=null;
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Open();
System.Data.SqlClient.SqlCommand myCommand=new System.Data.SqlClient.SqlCommand(sqlString,cn);
myCommand.CommandText=sqlString;
dataReader=myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
myCommand.Dispose();
}
catch(SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError( ex.Message + " " + ex.StackTrace );
dataReader=null;
}
return dataReader;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public DataSet getDataSet(string sqlString)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
DataSet Ds = new DataSet();
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Open();
SqlDataAdapter Da = new SqlDataAdapter(sqlString, cn);
Da.Fill(Ds);
Da.Dispose();
}
catch (SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError(ex.Message + " " + ex.StackTrace);
Ds = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
Close();
return Ds;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//// <summary>
/// 通过SQL语句获得DataSet
/// </summary>
/// <param name="sqlString">SQL语句</param>
/// <param name="cn">连接字符串名字</param>
/// <returns></returns>
public DataSet getDataSet(string sqlString, SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
DataSet Ds=new DataSet();
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
cn.Open();
SqlDataAdapter Da = new SqlDataAdapter(sqlString, cn);
Da.Fill(Ds);
Da.Dispose();
}
catch (SqlException ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
LogManager.WriteError(ex.Message + " " + ex.StackTrace);
Ds = null;
}
return Ds;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public int GetRecordCount(string sqlString,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
int m=0;
SqlDataReader dr=null;
if(getData("select count(*) as co from "+sqlString,cn,out dr))
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(dr.Read())
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
m=int.Parse(dr["co"].ToString());
}
dr.Close();
}
this.Close(cn);
return m;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public bool CheckRecord(string sqlString,SqlConnection cn)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
bool b=false;
SqlDataReader dr=null;
if(getData(sqlString,cn,out dr))
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(dr.Read())
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
b=true;
}
dr.Close();
}
this.Close(cn);
return b;
}
}
贴了些多余的,只要找到getDataSet()就行,然后最后在<Head></Head>里面加入javascript代码
<
script type
=
"
text/javascript
"
>
<!--
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
function
getBid(s)
...
{
return document.getElementById(s);
}
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
function
getBmc(s)
...
{
return document.getElementsByName(s);
}
//
显示分类列表
function
showNext(sid,obj)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
alert(sid);
if(sid==null||sid==""||sid.length<1)return;
var slt=getBid(obj);
var v=_Default.getNextClass(sid).value;
if(v!=null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
;
if(v!=null&&typeof(v)=="object"&&v.Tables!=null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
slt.length=0;
slt.options.add(new Option("请选择",0));
//加一个"请选择主要为了触发onchange 事件
if(obj=="DdlCity")
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
getBid("DdlArea").options.length=0;
getBid("DdlArea").options.add(new Option("请选择",0));
}
alert(v.Tables[0].Rows.length);
for(var i=0;i<v.Tables[0].Rows.length;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
var txt=v.Tables[0].Rows[i].txt;//这个地方要注意区分大小写
var vol=v.Tables[0].Rows[i].vol;//和dataset表的列名称要一致
slt.options.add(new Option(txt,vol));
}
}
}
return;
}
-->
</
script
>
作者已经写的非常经典,非常感谢,我只是做了些重用的改动,记下来方便以后学习使用。