| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2725 人关注过本帖
标题:两个DropDownList联动的问题?
只看楼主 加入收藏
airfei
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-4-12
收藏
 问题点数:0 回复次数:10 
两个DropDownList联动的问题?

我想做一个二级联动下拉菜单,不要求无刷新,想法是这样的。当我选择第一个中的项的时候,第二个下拉就根据第一个的值去添加。现在的问题是,我选择第一个的时候,就报错,说是id无效,我调试断点了一下,发现当我选择改变第一个的时候,就响应了ddl_areaBig_SelectedIndexChanged()事件,然后我的 this.ddl_areaBig.SelectedValue的就为空了。所以SQL语句就不能执行,造成我的第二个下拉就不能显示值。希望大家帮我解答一下。下面是这两个的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("order.mdb");
OleDbConnection con = new OleDbConnection(strCon);
con.Open();

OleDbDataAdapter oda = new OleDbDataAdapter();
oda.SelectCommand = new OleDbCommand("select distinct id,dealer,areaBig from dealer", con);
DataSet ds = new DataSet();
oda.Fill(ds, "dealer");
try
{

this.ddl_dealer.DataSource = ds.Tables["dealer"].DefaultView;
this.ddl_dealer.DataTextField = "dealer";
this.ddl_dealer.DataValueField = "id";
this.ddl_dealer.DataBind();

this.ddl_areaBig.DataSource = ds.Tables["dealer"].DefaultView;
this.ddl_areaBig.DataTextField = "areaBig";
this.ddl_areaBig.DataValueField = "id";
this.ddl_areaBig.DataBind();

}
catch (Exception ex)
{
//Response.Write(ex);
Response.Write("<script>window.alert('数据读取失败,请稍后再试...');</script>");
}
OleDbDataAdapter odaChild = new OleDbDataAdapter();
odaChild.SelectCommand = new OleDbCommand("select id,areaSmall from dealer where id=" + this.ddl_areaBig.SelectedValue, con);
DataSet dsChlid = new DataSet();
odaChild.Fill(dsChlid, "areaSmall");
foreach (DataRow row in dsChlid.Tables["areaSmall"].Rows)
{
this.ddl_areaSmall.Items.Add(new ListItem(row["areaSmall"].ToString(), row["id"].ToString()));
}
con.Close();
}
}

protected void ddl_areaBig_SelectedIndexChanged(object sender, EventArgs e)
{
this.ddl_areaBig.Items.Clear();
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("order.mdb");
OleDbConnection con = new OleDbConnection(strCon);
con.Open();

OleDbDataAdapter oda = new OleDbDataAdapter();
oda.SelectCommand = new OleDbCommand("select id,areaSmall from dealer where id=" + this.ddl_areaBig.SelectedValue,con);//就是这里页面打开的时候能取到值,当我再次选择第一个下拉列表的时候,他就不能取到值了。
DataSet ds = new DataSet();
oda.Fill(ds,"areaSmall");
foreach(DataRow row in ds.Tables["areaSmall"].Rows)
{
this.ddl_areaSmall.Items.Add(new ListItem(row["areaSmall"].ToString(),row["id"].ToString()));
}
con.Close();

}
谢谢大家!!!

搜索更多相关主题的帖子: DropDownList 
2007-10-30 23:43
airfei
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-4-12
收藏
得分:0 

呵呵,是我太粗心了,解决了.
还有个问题希望大家帮忙.
就是我的第一个ddl_areaBig读出的值有重复的,应该是我的表结构有问题.我是这样的,我的只有一个表,两个dropdownlist都是从这个表读数据.这个表录入的时候就打算录入重复的值,但是在读出的时候不想出现重复的值.大家有什么办法?

表结构
id(自动编号) dealer areaBig areaSmall
1 小明 渝中区 解放碑
2 小红 江北区 观音桥
3 小明 渝中区 上清侍
... ... ... ....

就是这样,所以我第一个下拉列表读出的 areaBig就有重复的值,我的原意是想选择下拉列表ddl_areaBig读出areaBig,然后根据第一个去读出第二个.如第一个选择渝中区,第二个就显示解放碑和上清侍.麻烦大家帮我看看.谢谢

2007-10-31 09:05
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
SQL语句加 distinct就行了

飘过~~
2007-10-31 09:39
airfei
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-4-12
收藏
得分:0 
我加了的.不行.
select distinct id,dealer,areaBig from dealer
他根本没有去掉重复的,
我的ID是自动编号的.这个没有影响吧
2007-10-31 10:08
垃圾的沉默
Rank: 1
等 级:新手上路
威 望:2
帖 子:511
专家分:0
注 册:2007-6-25
收藏
得分:0 
如果你服务器够好的话
select * from dealer a where id=(select max(id) from dealer b where a.不能重复的列名=b.不能重复的列名)

人们笑我太疯癫...我笑人们太正经
2007-10-31 10:20
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
(Select id,distinct areaBig From dealer)绑定到第一个DropDownlist
(Select id areaSmall From dealer Where areaBig=ddl_areaBig.SelectedValue.ToString();)绑定到第二个DropDownlist

------------------不为别的,就为你,我的理想!-----------------
2007-10-31 12:52
airfei
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-4-12
收藏
得分:0 
学习了,谢谢!!!!
2007-10-31 12:56
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 

测试通过的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDownList();
}
}

protected void BindDropDownList()
{
string strCon = "Data Source=.;Initial Catalog=tempdb;Integrated Security=SSPI";
SqlConnection con = new SqlConnection(strCon);
string strSelect = "Select count(id) as id,areaBig From dealer group by areaBig";
SqlDataAdapter sda = new SqlDataAdapter(strSelect, con);
DataSet ds = new DataSet();
sda.Fill(ds);

DropDownList1.DataSource = ds;
DropDownList1.DataValueField = "id";
DropDownList1.DataTextField = "areaBig";
DropDownList1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string strCon = "Data Source=.;Initial Catalog=tempdb;Integrated Security=SSPI";
SqlConnection con = new SqlConnection(strCon);
string strSelect = "Select id,areaSmall From dealer Where areaBig='"+DropDownList1.SelectedItem.Text+"'";
SqlDataAdapter sda = new SqlDataAdapter(strSelect, con);
DataSet ds = new DataSet();
sda.Fill(ds);

DropDownList2.DataSource = ds;
DropDownList2.DataValueField = "id";
DropDownList2.DataTextField = "areaSmall";
DropDownList2.DataBind();
}
连接数据库有点冗余,是因为临时写的,就没有考虑那么多.


------------------不为别的,就为你,我的理想!-----------------
2007-10-31 13:31
smoon
Rank: 1
等 级:禁止访问
帖 子:461
专家分:0
注 册:2006-4-29
收藏
得分:0 
group by不行吗?

QQ:860660016
网站:http://
承接各种C#项目中。。。。。
2007-11-01 13:15
xiaofkg
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-17
收藏
得分:0 
我试了怎么不行,总是提示sda.Fill(ds);这句错误-----确保它不是无限循环,什么意思
2007-11-02 22:03
快速回复:两个DropDownList联动的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041937 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved