此为DropDownList无刷新三级联动的另一种方法,使用javascript操作,因是在客户端操作,所以切换速度较快,但如果数据量大时,加载时会稍慢点,下一篇文章我会发布针对此方法的改进方案,供大家参考。此为DropDownList示例,ListBox只需略加修改。
数据库为国家统计局最新的行政区划,自己又加入了香港、台湾、澳门的行政区划,需要的朋友可直接下载使用。
数据库下载
/Files/netshuai/area.rar
aspx页面代码
<% =strAreaData %>
< script language = " JavaScript " type = " text/javascript " >
function changearea1()
{
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
document.all( " <% =Ddl_AreaThree.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
var oneid = document.all( " <% =Ddl_AreaOne.ClientID %> " ).value;
var i;
for (i = 0 ;i < onecount; i ++ )
{
if (subcat[i][ 1 ] == oneid)
{
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).options[document.all( " <% =Ddl_AreaTwo.ClientID %> " ).length] = new Option(subcat[i][ 0 ], subcat[i][ 2 ]);
}
}
}
function changearea2()
{
document.all( " <% =Ddl_AreaThree.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
var twoid = document.all( " <% =Ddl_AreaTwo.ClientID %> " ).value;
var oneid = document.all( " <% =Ddl_AreaOne.ClientID %> " ).value;
var i;
for (i = 0 ;i < onecount1; i ++ )
{
if (subcat1[i][ 2 ] == twoid)
{
if (subcat1[i][ 1 ] == oneid)
{
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[document.all( " <% =Ddl_AreaThree.ClientID %> " ).length] = new Option(subcat1[i][ 0 ], subcat1[i][ 3 ]);
}
}
}
}
</ script >
< asp:DropDownList ID = " Ddl_AreaOne " runat = " server " AppendDataBoundItems = " True " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
< asp:DropDownList ID = " Ddl_AreaTwo " runat = " server " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
< asp:DropDownList ID = " Ddl_AreaThree " runat = " server " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
cs页面代码
数据库为国家统计局最新的行政区划,自己又加入了香港、台湾、澳门的行政区划,需要的朋友可直接下载使用。
数据库下载
/Files/netshuai/area.rar
aspx页面代码
<% =strAreaData %>
< script language = " JavaScript " type = " text/javascript " >
function changearea1()
{
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
document.all( " <% =Ddl_AreaThree.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
var oneid = document.all( " <% =Ddl_AreaOne.ClientID %> " ).value;
var i;
for (i = 0 ;i < onecount; i ++ )
{
if (subcat[i][ 1 ] == oneid)
{
document.all( " <% =Ddl_AreaTwo.ClientID %> " ).options[document.all( " <% =Ddl_AreaTwo.ClientID %> " ).length] = new Option(subcat[i][ 0 ], subcat[i][ 2 ]);
}
}
}
function changearea2()
{
document.all( " <% =Ddl_AreaThree.ClientID %> " ).length = 0 ;
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[ 0 ] = new Option( ' 选择城市 ' , ' 0 ' );
var twoid = document.all( " <% =Ddl_AreaTwo.ClientID %> " ).value;
var oneid = document.all( " <% =Ddl_AreaOne.ClientID %> " ).value;
var i;
for (i = 0 ;i < onecount1; i ++ )
{
if (subcat1[i][ 2 ] == twoid)
{
if (subcat1[i][ 1 ] == oneid)
{
document.all( " <% =Ddl_AreaThree.ClientID %> " ).options[document.all( " <% =Ddl_AreaThree.ClientID %> " ).length] = new Option(subcat1[i][ 0 ], subcat1[i][ 3 ]);
}
}
}
}
</ script >
< asp:DropDownList ID = " Ddl_AreaOne " runat = " server " AppendDataBoundItems = " True " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
< asp:DropDownList ID = " Ddl_AreaTwo " runat = " server " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
< asp:DropDownList ID = " Ddl_AreaThree " runat = " server " >
< asp:ListItem Value = " 0 " > 请选择 </ asp:ListItem >
</ asp:DropDownList >
cs页面代码
protected
string
strAreaData;
protected void Page_Load( object sender, EventArgs e)
{
Ddl_AreaOne.Attributes.Add( " onchange " , " changearea1() " );
Ddl_AreaTwo.Attributes.Add( " onchange " , " changearea2() " );
string strSQL;
strSQL = " select * from nts_area where oneid<>0 and twoid=0 and threeid=0 order by sort " ;
Ddl_AreaOne.DataSource = DataClass.GetDataReader(strSQL);
Ddl_AreaOne.DataTextField = " areaname " ;
Ddl_AreaOne.DataValueField = " oneid " ;
Ddl_AreaOne.DataBind();
strAreaData = " <script language = 'JavaScript' type='text/javascript'>var onecount;onecount=0;subcat = new Array(); " ;
strSQL = " select * from nts_area where oneid<>0 and twoid<>0 and threeid=0 order by sort " ;
string ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='数据库路径'";
OleDbConnection cnn = new OleDbConnection(ConnectionString);
cnn.Open();
OleDbCommand cmd=new OleDbCommand(sql, cnn);
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int i1 = 0 ;
while (dr.Read())
{
strAreaData += " subcat[ " + i1.ToString() + " ] = new Array(' " + dr[ " areaname " ].ToString() + " ',' " + dr[ " oneid " ].ToString() + " ',' " + dr[ " twoid " ].ToString() + " '); " ;
i1 ++ ;
}
strAreaData += " onecount= " + i1.ToString() + " ; " ;
// 添加三级地区
strAreaData += " var onecount1;onecount1=0;subcat1 = new Array(); " ;
strSQL = " select * from nts_area where oneid<>0 and twoid<>0 and threeid<>0 order by sort " ;
cnn.Open();
cmd.CommandText = strSQL;
cmd.Connection = cnn;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int n1 = 0 ;
while (dr.Read())
{
strAreaData += " subcat1[ " + n1.ToString() + " ] = new Array(' " + dr[ " areaname " ].ToString() + " ',' " + dr[ " oneid " ].ToString() + " ',' " + dr[ " twoid " ].ToString() + " ',' " + dr[ " threeid " ].ToString() + " '); " ; n1 ++ ;
}
dr.Close();
strAreaData += " onecount1= " + n1.ToString() + " ;</script> " ;
}
protected void Page_Load( object sender, EventArgs e)
{
Ddl_AreaOne.Attributes.Add( " onchange " , " changearea1() " );
Ddl_AreaTwo.Attributes.Add( " onchange " , " changearea2() " );
string strSQL;
strSQL = " select * from nts_area where oneid<>0 and twoid=0 and threeid=0 order by sort " ;
Ddl_AreaOne.DataSource = DataClass.GetDataReader(strSQL);
Ddl_AreaOne.DataTextField = " areaname " ;
Ddl_AreaOne.DataValueField = " oneid " ;
Ddl_AreaOne.DataBind();
strAreaData = " <script language = 'JavaScript' type='text/javascript'>var onecount;onecount=0;subcat = new Array(); " ;
strSQL = " select * from nts_area where oneid<>0 and twoid<>0 and threeid=0 order by sort " ;
string ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='数据库路径'";
OleDbConnection cnn = new OleDbConnection(ConnectionString);
cnn.Open();
OleDbCommand cmd=new OleDbCommand(sql, cnn);
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int i1 = 0 ;
while (dr.Read())
{
strAreaData += " subcat[ " + i1.ToString() + " ] = new Array(' " + dr[ " areaname " ].ToString() + " ',' " + dr[ " oneid " ].ToString() + " ',' " + dr[ " twoid " ].ToString() + " '); " ;
i1 ++ ;
}
strAreaData += " onecount= " + i1.ToString() + " ; " ;
// 添加三级地区
strAreaData += " var onecount1;onecount1=0;subcat1 = new Array(); " ;
strSQL = " select * from nts_area where oneid<>0 and twoid<>0 and threeid<>0 order by sort " ;
cnn.Open();
cmd.CommandText = strSQL;
cmd.Connection = cnn;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
int n1 = 0 ;
while (dr.Read())
{
strAreaData += " subcat1[ " + n1.ToString() + " ] = new Array(' " + dr[ " areaname " ].ToString() + " ',' " + dr[ " oneid " ].ToString() + " ',' " + dr[ " twoid " ].ToString() + " ',' " + dr[ " threeid " ].ToString() + " '); " ; n1 ++ ;
}
dr.Close();
strAreaData += " onecount1= " + n1.ToString() + " ;</script> " ;
}
http://www.cnblogs.com/netshuai/archive/2007/09/13/892272.html