后台绑定的dropdownlist,当选中某项时会自己跳到同值的另一项项

一锅小青蛙 2015-12-23 02:38:51
比如dropdownlist有3项,分别是a(value=1),b(value=2),c(value=1),当我选中c这项时会自动选中为a,这是怎么回事? (这是个二级联动的dropdownlist)
下面是绑定的代码:

if (!Page.IsPostBack)
{
string sqlconstr = ConfigurationManager.ConnectionStrings["ConnectionServer"].ConnectionString;
SqlConnection con = new SqlConnection(sqlconstr);
con.Open();
SqlCommand cmd = new SqlCommand("select * from [WORK]", con);
SqlDataReader sdr = cmd.ExecuteReader();
this.DropDownList1.Items.Add("未选择");
this.DropDownList1.DataSource = sdr;
this.DropDownList1.DataTextField = "name";
this.DropDownList1.DataValueField = "mode";
this.DropDownList1.DataBind();
sdr.Close();
con.Close();
}

下面是选中触发事件内的:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string sqlconstr = ConfigurationManager.ConnectionStrings["ConnectionServer"].ConnectionString;
SqlConnection con = new SqlConnection(sqlconstr);
con.Open();
SqlCommand cmd = new SqlCommand("select * from [group] where mode=" + this.DropDownList1.SelectedValue + "", con);
SqlDataReader sdr = cmd.ExecuteReader();
this.DropDownList2.DataSource = sdr;
this.DropDownList2.DataTextField = "groupname";
this.DropDownList2.DataValueField = "grouptype";
this.DropDownList2.DataBind();
sdr.Close();
con.Close();
}
...全文
238 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
一锅小青蛙 2015-12-28
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
[quote=引用 7 楼 santiagochen 的回复:] DropDownList的value绑定grouptype+groupname拼起来的值
嗯。 他们确实是把 grouptype 说成是value,而然后又硬指着 groupname (也就是 a、b、c)来说事儿。 这个时候,其实只要把 groupname 作为value 就理顺了,而不需要 “grouptype+groupname拼起来”。[/quote] 之所以要用grouptype作为value也是因为其他控件或者网页上面会根据grouptype值的不同发生变化。 groupname中的数据的确是不同的,但他们对应的grouptype可能是相同的,所以将 groupname 作为value就有了问题。 就比如groupname是每个人的姓名,grouptype是每个人的工龄,现在控件需要根据工龄的不同呈现不同的内容该怎么办呢? 当然,以上只是本人的愚见而已。层主是这方面的大牛,在很多帖子中都能看到层主出于真心的指导或意见,所以我很感激您能对我的这个问题做出的多次回答。而我对于asp.net刚刚接触不久,设计上面的确不够周到,所以我非常希望能得到您的再次指正,谢谢!
lovebaby 2015-12-23
  • 打赏
  • 举报
回复
不要autopostback,直接把两个select的值读出来,然后通过前台脚本进行联动下拉。或者通过AJAX的方式进行绑定。
lovebaby 2015-12-23
  • 打赏
  • 举报
回复
不要autopostback,直接把两个select的值读出来,然后通过前台脚本进行联动下拉。或者通过AJAX的方式进行绑定。
abz7676 2015-12-23
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand("select * from [数据库表]", con); SqlDataReader sdr = cmd.ExecuteReader(); this.DropDownList1.Items.Add("未选择"); this.DropDownList1.DataSource = sdr; this.DropDownList1.DataTextField = "name"; this.DropDownList1.DataValueField = "mode"; this.DropDownList1.DataBind(); 建议楼主不要用这样的方式绑定下拉框,因为容易出问题。 最好用下面的方式绑定下拉框 void BindDropDownList1() { string sql = "select * from 数据库表"; DataTable dt = rdtable(sql); for (int i = 0; i < dt.Rows.Count; i++) { DropDownList1.Items.Add(new ListItem(dt.Rows[i]["Name"].ToString(), dt.Rows[i]["Id"].ToString())); } DropDownList1.Insert(0, new ListItem("全部", "0")); }
abz7676 2015-12-23
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand("select * from [数据库表]", con); SqlDataReader sdr = cmd.ExecuteReader(); this.DropDownList1.Items.Add("未选择"); this.DropDownList1.DataSource = sdr; this.DropDownList1.DataTextField = "name"; this.DropDownList1.DataValueField = "mode"; this.DropDownList1.DataBind(); 建议楼主不要用这样的方式绑定下拉框,因为容易出问题。 最好用下面的方式绑定下拉框 void BindDropDownList1() { string sql = "select * from 数据库表"; DataTable dt = rdtable(sql); for (int i = 0; i < dt.Rows.Count; i++) { DropDownList1.Items.Add(new ListItem(dt.Rows[i]["Name"].ToString(), dt.Rows[i]["Id"].ToString())); } DropDownList1.Insert(0, new ListItem("全部", "0")); }
abz7676 2015-12-23
  • 打赏
  • 举报
回复
SqlCommand cmd = new SqlCommand("select * from [数据库表]", con); SqlDataReader sdr = cmd.ExecuteReader(); this.DropDownList1.Items.Add("未选择"); this.DropDownList1.DataSource = sdr; this.DropDownList1.DataTextField = "name"; this.DropDownList1.DataValueField = "mode"; this.DropDownList1.DataBind(); 建议楼主不要用这样的方式绑定下拉框,因为容易出问题。 最好用下面的方式绑定下拉框 void BindDropDownList1() { string sql = "select * from 数据库表"; DataTable dt = rdtable(sql); for (int i = 0; i < dt.Rows.Count; i++) { DropDownList1.Items.Add(new ListItem(dt.Rows[i]["Name"].ToString(), dt.Rows[i]["Id"].ToString())); } DropDownList1.Insert(0, new ListItem("全部", "0")); }
  • 打赏
  • 举报
回复
引用 6 楼 dxt_9668 的回复:
原因是dropdownlist在自动回发状态下value值不能相同,可现在实际应用中面临值可能相同的情况,那该怎么办呢?纠结~
基本的原则,就是:如果你要用一个控件,那么你就要顺着人家控件的设计的原本的概念去使用概念。不要很任性地非要纠结人家的概念,而应该改变自己的概念。那样根本不会有1分钟的纠结的,也不用发帖。
scatking 2015-12-23
  • 打赏
  • 举报
回复
父下拉框的text和value都用a,b,c。 DropDownList1_SelectedIndexChanged事件里,现根据a,b,c查询相应的mode。再查询子下拉框的数据。
  • 打赏
  • 举报
回复
引用 7 楼 santiagochen 的回复:
DropDownList的value绑定grouptype+groupname拼起来的值
嗯。 他们确实是把 grouptype 说成是value,而然后又硬指着 groupname (也就是 a、b、c)来说事儿。 这个时候,其实只要把 groupname 作为value 就理顺了,而不需要 “grouptype+groupname拼起来”。
  • 打赏
  • 举报
回复
引用 6 楼 dxt_9668 的回复:
原因是dropdownlist在自动回发状态下value值不能相同,可现在实际应用中面临值可能相同的情况,那该怎么办呢?纠结~
那就说明你们所以为的value,并不是控件的value。你们需要在设计上做出变通,不要把自己的value直接作为控件的value去绑定。 做不了变通就先别开发了。找个新的领导来决定。
santiagochen 2015-12-23
  • 打赏
  • 举报
回复
DropDownList的value绑定grouptype+groupname拼起来的值
一锅小青蛙 2015-12-23
  • 打赏
  • 举报
回复
原因是dropdownlist在自动回发状态下value值不能相同,可现在实际应用中面临值可能相同的情况,那该怎么办呢?纠结~
一锅小青蛙 2015-12-23
  • 打赏
  • 举报
回复
有没有好办法可以解决?改value不太可能
八丶戒 2015-12-23
  • 打赏
  • 举报
回复
a(value=1),b(value=2),c(value=1) value值相同, 改成c(value=3)
junsuixin 2015-12-23
  • 打赏
  • 举报
回复
因为你a和c的value都是1。所以就认为是1喽
一锅小青蛙 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 roboot 的回复:
抽根烟,帮顶
谢谢
Lightning-McQueen 2015-12-23
  • 打赏
  • 举报
回复
抽根烟,帮顶

62,272

社区成员

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

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

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

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