<asp:DropDownList ID="ddl1" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddl2" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddl3" runat="server">
</asp:DropDownList>
我用这三个控件做三级联动..己经无问题...我在MSSQL里查询搜索的是用ddl3里的TEXT值.己用dl3.SelectedItem.Text提出.但是一级菜单是完全正确的..而当我把ddl1下拉一次,选择其它选择项的时候,比如ddl1(2).就会出错.其dl3.SelectedItem.Text里的值还是第ddl1(1)-ddl2(1)-ddl3(1)的内容
而不是ddl1(2)-ddl2(1)-ddl1(*)里的值.当点击按钮以后,我的联动框内容就会变为ddl1(2) ddl2(ddl1(1)-ddl2(1)) ddl3(ddl1(1)-ddl2(1)-ddl3(1)) 这完全是错误的呀..闷啊.我是用DropDownList做的多条件搜索.当点击确定按钮选择的ddl3的内容如果变掉.分页的时候查询出来的内容就是错误的.
那高手帮一下呀...
</asp:DropDownList><asp:DropDownList ID="ddl2" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddl3" runat="server">
</asp:DropDownList>
我用这三个控件做三级联动..己经无问题...我在MSSQL里查询搜索的是用ddl3里的TEXT值.己用dl3.SelectedItem.Text提出.但是一级菜单是完全正确的..而当我把ddl1下拉一次,选择其它选择项的时候,比如ddl1(2).就会出错.其dl3.SelectedItem.Text里的值还是第ddl1(1)-ddl2(1)-ddl3(1)的内容
而不是ddl1(2)-ddl2(1)-ddl1(*)里的值.当点击按钮以后,我的联动框内容就会变为ddl1(2) ddl2(ddl1(1)-ddl2(1)) ddl3(ddl1(1)-ddl2(1)-ddl3(1)) 这完全是错误的呀..闷啊.我是用DropDownList做的多条件搜索.当点击确定按钮选择的ddl3的内容如果变掉.分页的时候查询出来的内容就是错误的.
那高手帮一下呀...
-----------------------------------------------------------------------------
可是我一定得要Text里的值呀..
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(House_Hack)); //必要的
if (!Page.IsPostBack)
{
BindDc();
}private void BindDc()
{
//第一个
string sql = @"select * from city where city_Parent=0";
ddl1.DataSource = getDs(sql);
ddl1.DataTextField = "city_Name";
ddl1.DataValueField = "city_id";
ddl1.AutoPostBack = false;
ddl1.DataBind();
if (ddl1.DataSource != null) ddl1.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ctl00_ContentPlaceHolder1_ddl2');");
//可以先判断 DropDownList.SelectedItem.Value
//第二个
sql = @"select * from city where city_Parent=" + ddl1.SelectedItem.Value;
ddl2.DataSource = getDs(sql);
ddl2.DataTextField = "city_Name";
ddl2.DataValueField = "city_id";
ddl2.AutoPostBack = false;
ddl2.DataBind(); //第三个
if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ctl00_ContentPlaceHolder1_ddl3');");
sql = @"select * from city where city_Parent=" + ddl2.SelectedItem.Value;
ddl3.DataSource = getDs(sql);
ddl3.DataTextField = "city_Name";
ddl3.DataValueField = "city_id";
ddl3.AutoPostBack = false;
ddl3.DataBind(); }
/// <summary>
/// 获取下级分类
/// </summary>
[AjaxPro.AjaxMethod]
public DataSet getNextClass(string cid)
{
//因为不希望页面可以知道字段名称 所以 as txt,id as vol 如果是sql ser 可以用 =
//页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
//所以二级分类没变化
string sql = @"select city_Name as txt,city_id as vol from city where city_Parent=" + cid;
try
{
return getDs(sql);
}
catch
{
//throw;
return null;
}
} /// <summary>
/// 返回一个DataSet
/// </summary>
/// <param name="SQL"></param>
/// <returns></returns>
public DataSet getDs(string SQL)
{
// SqlConnection conn = myConn();
DataSet Ds = new DataSet();
SqlDataAdapter Da = new SqlDataAdapter(SQL, connstring);
try
{
Da.Fill(Ds);
return Ds;
}
catch
{
return null;
//throw;
} }
PS:我用了母版,所以这里就不写出form的内容了.<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
<%@ Page Language="C#" enableEventValidation="false" AutoEventWireup="true" CodeFile="Hack.aspx.cs" Inherits="House_Hack" Title="Untitled Page" %><script language="javascript" type="text/javascript">
<!--
// ACLOUD 常用JS函数
function getBid(s){
return document.getElementById(s);
}
function getBmc(s){
return document.getElementByName(s);
}
//显示分类列表
function showNext(sid,obj)
{
if(sid==null || sid=="" || sid.length<1)return;
var slt =getBid(obj);
var v = House_Hack.getNextClass(sid).value; // 类的名称
//alert(v);
//return;
if (v != null){
if(v != null && typeof(v) == "object" && v.Tables != null)
{
slt.length = 0;
slt.options.add(new Option("请选择",0));
//加了个“请选择”主要为了触发onchange事件
if(obj=="ctl00_ContentPlaceHolder1_ddl2"){
getBid("ctl00_ContentPlaceHolder1_ddl3").options.length=0;
getBid("ctl00_ContentPlaceHolder1_ddl3").options.add(new Option("请选择",0));
}
for(var i=0; i<v.Tables[0].Rows.length; i++)
{
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><asp:DropDownList ID="ddl1" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddl2" runat="server">
</asp:DropDownList><asp:DropDownList ID="ddl3" runat="server">
</asp:DropDownList>
是的話每PostBack一次,就databind一次