你是给 <asp:DropDownList ID="ddl1" runat="server"> </asp:DropDownList> <asp:DropDownList ID="ddl2" runat="server"> </asp:DropDownList> <asp:DropDownList ID="ddl3" runat="server"> </asp:DropDownList> 着3个DropDownList 里面绑定数据吗? 如果是的话! 你能不能够! 调用他里面的 AutoPostBack="True" OnSelectedIndexChanged="DrpM_SelectedIndexChanged" 事件呢? 在后台 protected void DrpM_SelectedIndexChanged(object sender, EventArgs e) { this.DrpD.Items.Clear(); int D = 0; switch (this.DrpM.SelectedValue)选种的值! 着是我以前做的一个例子! { case "1": case "3": case "5": case "7": case "8": case "10": case "12": D = 32; break; case "4": case "6": case "9": case "11": D = 31; break; case "2": D = 30; break; } for (int i = 1; D > i; i++) { ListItem ListD = new ListItem(); ListD.Value = Convert.ToString(i); ListD.Text = Convert.ToString(i); this.DrpD.Items.Add(ListD); } this.DrpD.Enabled = true; this.UpdatePanel2.Update(); }
加个js函数 function getValue() { var ddl1=document.getElementById('<%=ddl1.ClientID %>'); var ddl2=document.getElementById('<%=ddl2.ClientID %>'); var ddl3=document.getElementById('<%=ddl3.ClientID %>'); var one=ddl1.options[ddl1.selectedIndex].text; var two=ddl2.options[ddl2.selectedIndex].text; var three=ddl3.options[ddl3.selectedIndex].text;
先顶下吧!在给你发点例子 http://www.wangchao.net.cn/bbsdetail_495545.htmlhttp://blog.csdn.net/zhoufoxcn/archive/2008/01/07/2029204.aspx 2级联动! 道理基本是一样的!
<asp:DropDownList ID="ddl1" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddl2" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddl3" runat="server">
</asp:DropDownList> 着3个DropDownList 里面绑定数据吗?
如果是的话! 你能不能够! 调用他里面的
AutoPostBack="True" OnSelectedIndexChanged="DrpM_SelectedIndexChanged" 事件呢?
在后台
protected void DrpM_SelectedIndexChanged(object sender, EventArgs e)
{
this.DrpD.Items.Clear();
int D = 0;
switch (this.DrpM.SelectedValue)选种的值! 着是我以前做的一个例子!
{
case "1":
case "3":
case "5":
case "7":
case "8":
case "10":
case "12":
D = 32;
break;
case "4":
case "6":
case "9":
case "11":
D = 31;
break;
case "2":
D = 30;
break;
}
for (int i = 1; D > i; i++)
{
ListItem ListD = new ListItem();
ListD.Value = Convert.ToString(i);
ListD.Text = Convert.ToString(i);
this.DrpD.Items.Add(ListD);
}
this.DrpD.Enabled = true;
this.UpdatePanel2.Update();
}
数据库:
1 ID INT IDENTITY(1,1) PRAMYKEY
2 areaname varchar(20) //省市县名称
3 oneid int
4 twoid int--------------------------------数据实例-----
ID areaname oneid twoid
1 北京市 0 1
2 东城区 1 2
3 西城区 1 2
4 山东省 0 1
5 临沂市 4 2
6 济南市 4 2
7 青岛市 4 2
8 四方区 7 3
9 芝罘区 7 3
10 历下区 6 3
11 槐荫区 6 3
----------------------------------------------
demo.aspx 页面
----------------------------ajaxpro javascript---------
<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 = _Default.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=="ddl2"){
getBid("ddl3").options.length=0;
getBid("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>
---------------------DropDownList
<asp:DropDownList ID="ddl1" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddl2" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddl3" runat="server">
</asp:DropDownList>--------------------------------------------------------------demo.aspx.cs
------------------页面代码
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default)); //必要的 if (!IsPostBack) BindDc();
} /// <summary>
/// 获取下级分类
/// </summary>
[AjaxPro.AjaxMethod]
public DataSet getNextClass(string cid)
{
//因为不希望页面可以知道字段名称 所以 as txt,id as vol 如果是sql ser 可以用 =
//页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
//所以二级分类没变化
int oneid = Convert.ToInt32(cid);
DataSet ds;
try
{
return ds = bna.GetNext(oneid);
}
catch
{
return null;
}
}
private void BindDc()
{
//第一个
ddl1.DataSource = bna.GetPro();
ddl1.DataTextField = "areaname";
ddl1.DataValueField = "ID";
ddl1.DataBind();
if (ddl1.DataSource != null)
ddl1.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ddl2');");
//可以先判断 DropDownList.SelectedItem.Value
//第二个
int oneid = Convert.ToInt32(ddl1.SelectedItem.Value);
ddl2.DataSource = bna.GetPro(oneid);
ddl2.DataTextField = "areaname";
ddl2.DataValueField = "ID";
ddl2.DataBind(); //第三个
if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ddl3');");
int oneTwo = Convert.ToInt32(ddl2.SelectedItem.Value);
ddl3.DataSource = bna.GetNext(oneTwo);
ddl3.DataTextField = "areaname";
ddl3.DataValueField = "ID";
ddl3.DataBind();
}-----------------存储过程
-----GetNext
ALTER PROCEDURE sp_nts_Area_Next
@oneid int
AS
select ID as vol , areaname as txt from nts_area where oneid = @oneid
---------GetPro
ALTER PROCEDURE sp_nts_Area_GetPro
AS
SELECT
*
FROM [nts_Area] where oneid = 0-------------------------------------------
这就是全部的源码,谢谢各位了!!!!在线等。能实现级联下拉效果,问题是只能取第一个的值。
不能取得后两个的值,我想要源码。谢谢,不是我懒不考虑,是我实在不知道怎么做了。谢谢了!!!!
private void BindDc()
{
//第一个
ddl1.DataSource = bna.GetPro();
ddl1.DataTextField = "areaname";
ddl1.DataValueField = "ID";
ddl1.DataBind();
if (ddl1.DataSource != null)
ddl1.Attributes.Add("onchange", "showNext(this.options[this.selectedIndex].value,'"+ddl2.ClientID+"');");
//可以先判断 DropDownList.SelectedItem.Value
//第二个
int oneid = Convert.ToInt32(ddl1.SelectedItem.Value);
ddl2.DataSource = bna.GetPro(oneid);
ddl2.DataTextField = "areaname";
ddl2.DataValueField = "ID";
ddl2.DataBind(); //第三个
if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[this.selectedIndex].value,'"+ddl3.ClientID+"');");
int oneTwo = Convert.ToInt32(ddl2.SelectedItem.Value);
ddl3.DataSource = bna.GetNext(oneTwo);
ddl3.DataTextField = "areaname";
ddl3.DataValueField = "ID";
ddl3.DataBind();
}
谢谢....等啊 ....
Request["控件Name"]来获取!
用微软的UpdatePanel就行。
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
string address = this.ddl1.SelectedItem.Text.ToString();
只能取得第一个,其它两个都是初始值.
{
var ddl1=document.getElementById('<%=ddl1.ClientID %>');
var ddl2=document.getElementById('<%=ddl2.ClientID %>');
var ddl3=document.getElementById('<%=ddl3.ClientID %>');
var one=ddl1.options[ddl1.selectedIndex].text;
var two=ddl2.options[ddl2.selectedIndex].text;
var three=ddl3.options[ddl3.selectedIndex].text;
document.getElementById('<%=hid.ClientID %>').value=one+','+two+','+three;
}页面上加个<asp:HiddenField ID="hid" runat="server" />在你按钮的OnClientClick 后面写getValue();
string []str=string.IsNullOrEmpty(hid.Value)?null:hid.Value.Split(',');str数组就是你需要的