100分请教关于几个DropDownList,用程序控制改变其中一个DropDownList的选择项时,其他的DropDownList也跟着变的问题!

xuehan 2003-02-25 11:52:40
我有三个DropDownList,分别为wz1、wz2、wz3,他们开始载入的ListItem都相同,如下: <asp:ListItem Value="wz0001">wz0001</asp:ListItem> <asp:ListItem Value="wz0002">wz0002</asp:ListItem>
<asp:ListItem Value="wz0003">wz0003</asp:ListItem>
我用如下程序来设置wz1、wz2、wz3的选择:
int i;
int k;
for (i=0;i<3;i++)
{
k=i+1;
if (k==1)
{
wz1.Items[wz1.SelectedIndex].Selected=false;
wz1.Items[1].Selected=true;
}
if (k==2)
{
wz2.Items[wz2.SelectedIndex].Selected=false;
wz2.Items[2].Selected=true;
}
if (k==3)
{
wz3.Items[wz3.SelectedIndex].Selected=false;
wz3.Items[3].Selected=true;
}
}
但是最后的结果总是都选种了最后一个DropDownList的值,就是说wz1、wz2、wz3都选的wz0003,请问有哪位大侠能指点迷经?
...全文
57 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyinwind 2003-02-25
  • 打赏
  • 举报
回复
建议楼主看看VS.NET自带的实例教程中的CarsSelector例程,上面讲解了使用DataTable和DataView来解决这个问题的方法
xuehan 2003-02-25
  • 打赏
  • 举报
回复
事实上我的程序没这么简单,我的循环和IF语句都是有条件的,我是为了简单点才这样问的,实际问题和上面说的问题一样
zwztu 2003-02-25
  • 打赏
  • 举报
回复
你想实现什么功能?
gOODiDEA 2003-02-25
  • 打赏
  • 举报
回复
去掉循环

if (k==1)
{
wz1.Items[wz1.SelectedIndex].Selected=false;
wz1.Items[1].Selected=true;
wz2.Items[wz2.SelectedIndex].Selected=false;
wz2.Items[2].Selected=true;
wz3.Items[wz3.SelectedIndex].Selected=false;
wz3.Items[3].Selected=true;
}
……

不太明白你的意思,你试试。
xuehan 2003-02-25
  • 打赏
  • 举报
回复
谢谢blazelgh(blaze) ,马上揭贴!
supnet 2003-02-25
  • 打赏
  • 举报
回复
first: wz1,wz2 and wz3 应该在内容上有互相联系,这样才能当wz1改变时wz2,wz3才能随之改变。
second:在OnSelectedIndexChanged事件中把wz1当前选择的值作为wz2要绑定的条件之一,依次类推。
这里有一个简单例子:
//绑定DropDownList的方法:
protected void BindDropDown(string sSQL, string sValueField, string sTextField, DropDownList dropdown)
{
SqlConnection oConn = new SqlConnection(ConnString);
oConn.Open();
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;
}
//OnSelectedIndexChanged="ChangeSelection"
protected void ChangeSelection(Object sender, EventArgs e)
{
DropDownList d = (DropDownList)sender;
if ( d == wz1)
{
string sID = wz1.SelectedItem.Value;
BindDropDown("select * from t_table where c_columns=" + sID,"c_id","c_mc",wz2);
string sID = wz2.SelectedItem.Value;
BindDropDown("select * from t_table1 where c1_columns=" + sID,"c1_id","c1_mc",wz3);
}
}

you try:
blazelgh 2003-02-25
  • 打赏
  • 举报
回复
可以结贴了吧?
blazelgh 2003-02-25
  • 打赏
  • 举报
回复
哦,问题明白了.是这样的.你在为DropDownList加ListItem的时候用的是同一个对象.
三个DropDownList 用一个ListItem,在用Button1_Click 里面wz1.Items wz2.Items
wz3.Items 指的就是同一个ListItem.所以当运行到wz3.Items[2].Selected=true 就会
把这个listitem的选择定在第三个item上.

你只有用三个listitem分别给DropDownList
例如:
for (i=0;i<3;i++)
{
k=i+1;
ListItem item1=new ListItem();
ListItem item2=new ListItem();
ListItem item3=new ListItem();

item1.Text="WZ00"+k;
item1.Value="WZ00"+k;

item2.Text="WZ00"+k;
item2.Value="WZ00"+k;

item3.Text="WZ00"+k;
item3.Value="WZ00"+k;

wz1.Items.Add(item1);
wz2.Items.Add(item2);
wz3.Items.Add(item3);
}
xuehan 2003-02-25
  • 打赏
  • 举报
回复
先谢谢大家的参与,忘了说明的是:他们的ListItem都是程序加上去的,下面的程序完全说明了我的问题:
先有个函数是加ListItem的:
void aa()
{
wz1.Items.Clear();
wz3.Items.Clear();
wz2.Items.Clear();
int k;
int i;
for (i=0;i<3;i++)
{
k=i+1;
ListItem item1=new ListItem();
item1.Text="WZ00"+k;
item1.Value="WZ00"+k;

wz1.Items.Add(item1);
wz2.Items.Add(item1);
wz3.Items.Add(item1);
}
}

然后有一个按扭:
private void Button1_Click(object sender, System.EventArgs e)
{
aa();
int i;
for (i=0;i<3;i++)
{
if (i==0)
{
wz1.Items[wz1.SelectedIndex].Selected=false;
wz1.Items[0].Selected=true;
}
if (i==1)
{
wz2.Items[wz2.SelectedIndex].Selected=false;
wz2.Items[1].Selected=true;
}
if (i==2)
{
wz3.Items[wz3.SelectedIndex].Selected=false;
wz3.Items[2].Selected=true;
}
}
}


结果三个DropDownList的选择都是WZ003
blazelgh 2003-02-25
  • 打赏
  • 举报
回复
首先你这程序有个错误.
wz3.Items[3].Selected=true;
会造成数组越位.

wz1.Items[0].Selected=true;
wz2.Items[1].Selected=true;
wz3.Items[2].Selected=true;

我的程序是这样的.测试后
wz1里面是wz0001
wz2里面是wz0002
wz3里面是wz0003

不知道是不是你要的结果.
<!--
@Author : Martin;
@Version: 2003-2-25
-->
<%@ Page language="C#" runat="server" debug=true%>
<html>
<head>
<script language="C#" runat="Server">
public void Page_Load(object sender, EventArgs e) {
int i;
int k;
for (i=0;i<3;i++)
{
k=i+1;
if (k==1)
{
wz1.Items[wz1.SelectedIndex].Selected=false;
wz1.Items[0].Selected=true;
}
if (k==2)
{
wz2.Items[wz2.SelectedIndex].Selected=false;
wz2.Items[1].Selected=true;
}
if (k==3)
{
wz3.Items[wz3.SelectedIndex].Selected=false;
wz3.Items[2].Selected=true;
}
}

}
</script>
</head>
<body>
<form runat="server">
<asp:DropDownList id=wz1 runat=server>
<asp:ListItem Value="wz0001">wz0001</asp:ListItem>
<asp:ListItem Value="wz0002">wz0002</asp:ListItem>
<asp:ListItem Value="wz0003">wz0003</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id=wz2 runat=server>
<asp:ListItem Value="wz0001">wz0001</asp:ListItem>
<asp:ListItem Value="wz0002">wz0002</asp:ListItem>
<asp:ListItem Value="wz0003">wz0003</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id=wz3 runat=server>
<asp:ListItem Value="wz0001">wz0001</asp:ListItem>
<asp:ListItem Value="wz0002">wz0002</asp:ListItem>
<asp:ListItem Value="wz0003">wz0003</asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>




zhangwei0951 2003-02-25
  • 打赏
  • 举报
回复
不好意思,没看明白你的意思,我再看看
zhangwei0951 2003-02-25
  • 打赏
  • 举报
回复
给你个思路吧,当第一个dropdownlist的内容改变时,激发SelectedIndexChanged事件,你可以在这个事件里面写代码,比如DropDownList2.DataSource = dataset.Tables("userinf")
DropDownList2.DataBind(),这样第二个dropdownlist的内容就会改变了,不过之前你要将它的DataValueField和DataTextField还有DataSource指定好,最后还要加上这个If Not IsPostBack Then
DropDownList2.DataBind()
end if
xuehan 2003-02-25
  • 打赏
  • 举报
回复
难道每人遇到过这种需要吗?不能帮我解决吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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