请教如何处理两个有关联的DropDownList的程序??

supnet 2003-01-09 10:10:09
在asp.net页面上,有两个DropDownList控件,其中一个是设置有关省份的,另一个是设置有关该省份所辖的市级城市名称。在数据库中已经有二者相对应的表.
我的问题是:当在控件1中选择了一个省的名称,那么在第二控件中就应绑定与该省相对应的城市名称,请问各位如何绑定这类事件??
...全文
58 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-01-10
  • 打赏
  • 举报
回复
try something like


<%@ Import Namespace="System.Data.SqlClient"%>
<%@ Import Namespace="System.Data"%>
<form runat="server">
College:
<asp:DropDownList id="College" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ChangeSelection"/><BR>
Department:
<asp:DropDownList id="Department" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ChangeSelection"/><BR>
Major:
<asp:DropDownList id="Major" runat="server" /><BR>
</form>
<script language="C#" runat="server">
const string sConn = "Server=localhost;Database=tempdb;UID=sa;PWD=;";
SqlConnection oConn = new SqlConnection(sConn);
void Page_Load(Object o, EventArgs e)
{
oConn.Open();

if (!IsPostBack)
{
BindDropDown("select * from college","cid","cname",College);
string sID = College.SelectedItem.Value;
BindDropDown("select * from department where cid=" + sID,"did","dname",Department);
sID = Department.SelectedItem.Value;
BindDropDown("select * from major where did=" + sID,"mid","mname",Major);
}
}

void Page_Unload(Object o, EventArgs e)
{
oConn.Close();
}

void BindDropDown(string sSQL, string sValueField, string sTextField, DropDownList dropdown)
{
SqlCommand cmd = new SqlCommand(sSQL, oConn);
SqlDataReader dr = cmd.ExecuteReader();
dropdown.DataSource = dr;
dropdown.DataValueField = sValueField;
dropdown.DataTextField = sTextField;
dropdown.DataBind();
dr.Close();
dropdown.SelectedIndex = 0;
}

void ChangeSelection(Object sender, EventArgs e)
{
DropDownList d = (DropDownList)sender;
if ( d == College)
{
string sID = College.SelectedItem.Value;
BindDropDown("select * from department where cid=" + sID,"did","dname",Department);
sID = Department.SelectedItem.Value;
BindDropDown("select * from major where did=" + sID,"mid","mname",Major);
}
else if (d == Department)
{
string sID = Department.SelectedItem.Value;
BindDropDown("select * from major where did=" + sID,"mid","mname",Major);
}
}

</script>



sql script:

use tempdb
go

create table college (cid int, cname varchar(20))
go
create table department (did int,dname varchar(20),cid int)
go
create table major (mid int, mname varchar(20), did int)
go

insert into college values (1,'Arts')
go
insert into college values (2,'Sciences')
go
insert into department values (1,'Chinese',1)
go
insert into department values (2,'Foreign Language',1)
go
insert into department values (3,'Computer',2)
go
--insert into department values (4,'Physics',2)
--go

insert into major values (1,'Classic Chinese',1)
go
insert into major values (2,'Modern Chinese',1)
go
insert into major values (3,'English',2)
go
insert into major values (4,'French',2)
go
insert into major values (5,'Graphics',3)
go
insert into major values (6,'Operating System',3)
go
--insert into major values (7,'Solid State',4)
--go
--insert into major values (8,'Optics',4)
--go
supnet 2003-01-10
  • 打赏
  • 举报
回复
抱歉!是我没有说清楚!
现在我说的详细些,还是举一个例子吧:
在一所大学里要查询某一学院下的某一系对应某一专业中的某一年级的某一班级的学生信息,假如刚好某一系下暂时只有一个专业,请问如何写这类OnSelectedIndexChanged呢??
谢谢saucer!
saucer 2003-01-10
  • 打赏
  • 举报
回复
I do not know what you are talking about? BindCity() inside Page_Load should take care of that
suppgo 2003-01-10
  • 打赏
  • 举报
回复
是啊!的确我是举个例子!我是说当DropDownList只有一个值时,而其对应的下一个DropDownList还有几个值?该如何处理这类程序呢??
谢谢saucer的指点!!!
supnet 2003-01-10
  • 打赏
  • 举报
回复
非常感谢saucer的不倦指点!!!
现在问题解决了!
saucer,能帮我指点一下有关分页后出现的问题吗?帖子号:
http://expert.csdn.net/Expert/topic/1337/1337784.xml?temp=7.761782E-02

非常感谢saucer!
saucer 2003-01-09
  • 打赏
  • 举报
回复
int provinceid = (int)ds.Tables[0].Rows[nIndex]["tb_sheng.proid"];
supnet 2003-01-09
  • 打赏
  • 举报
回复
谢谢saucer!新年好!好久不见您!!新年好!
我正看着呢!!!一定没问题!!
哦!saucer,我还有一个问题:就是如何提取表中字段的值,这样写好象不对:
int provinceid = (int)ds.Tables[0].Columns["tb_sheng.proid"].DefaultValue;
该如何提取该字段的值??
非常感谢saucer!!!!!!
saucer 2003-01-09
  • 打赏
  • 举报
回复
try something like

<%@ Import Namespace="System.Data.SqlClient"%>
<%@ Import Namespace="System.Data"%>
<form runat="server">
Province:
<asp:DropDownList id="Province" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ChangeSelection"/><BR>
City:
<asp:DropDownList id="City" runat="server" />
</form>
<script language="C#" runat="server">
const string sConn = "Server=localhost;Database=tempdb;UID=sa;PWD=;";
SqlConnection oConn = new SqlConnection(sConn);
void Page_Load(Object o, EventArgs e)
{
if (!IsPostBack)
{
SqlCommand cmd = new SqlCommand("select * from province", oConn);
oConn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Province.DataSource = dr;
Province.DataValueField = "pid";
Province.DataTextField = "pname";
Province.DataBind();
Province.SelectedIndex = 0;
dr.Close();
BindCity();
}
}

void ChangeSelection(Object o, EventArgs e)
{
BindCity();
}

void BindCity()
{
string sID = Province.SelectedItem.Value;
SqlCommand cmd = new SqlCommand("select * from city where pid = " + sID, oConn);
oConn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
City.DataSource = dr;
City.DataValueField = "cid";
City.DataTextField = "cname";
City.DataBind();
dr.Close();
}
</script>

sql script:

create table province (pid int, pname varchar(20))
go
create table city (cid int, cname varchar(20),pid int)
go

insert into province values (1,'Jiangsu')
go
insert into city values (1,'Suzhou',1)
go
insert into city values (2,'Nanjing',1)
go

insert into province values (2,'Zhejiang')
go
insert into city values (3,'Hangzhou',2)
go
saucer 2003-01-09
  • 打赏
  • 举报
回复
if you only have one province, why do you need to 触发下一个OnSelectedIndexChanged事件???
supnet 2003-01-09
  • 打赏
  • 举报
回复
刚才调试的过程中,还出现一个问题:当DropDownList中只有一个值时,不能触发下一个OnSelectedIndexChanged事件,请问如何处理这类问题??
谢谢!!!!!
supnet 2003-01-09
  • 打赏
  • 举报
回复
抱歉,saucer,帖子号错了,正确的帖子号:
http://expert.csdn.net/Expert/topic/1337/1337784.xml?temp=7.761782E-02
谢谢saucer!!!!!!
supnet 2003-01-09
  • 打赏
  • 举报
回复
非常谢谢saucer的指点!现在可以了!!
请saucer帮我看看昨天发的一个有关分页问题的帖子。帖子号:
http://expert.csdn.net/Expert/TopicView1.asp?id=1337784
非常感谢saucer!!

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧