问题描述
有两个DropDownList以下简称ddl1ddl2ddl1的内容是通过手写添加进去的.ddl2的内容是根据ddl1的选择取得他的SelectValue值然后通过值来查询数据库中的内容付给ddl2然后在一个保存按钮里分别取得两个DropDownList的SelectValue值写入到数据库ddl1我设置了ISPostBackddl2没有设置如果设置了话就无法联动了.现在就是取值的问题明明都选择好了就是取的值不对ddl1是正确的ddl2的值一直是查询出结果的第一个值比如查询出来的内容是a0,a1,a2,a3,a4,a5也已经帮定到ddl2上并显示出来了可以每次点了保存后取出的总会是"a0"再选别的也一样帮忙给看看..代码如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclassadmin_fr_add:System.Web.UI.Page{SqlConnectioncon=newSqlConnection("server=o;uid=sa;database=book");protectedvoidPage_Load(objectsender,EventArgse){if(Session["admin"]==null){//Response.Redirect("../ST_contraller.aspx?cname=noadmin");}bind_2();}protectedvoidLinkButton2_Click(objectsender,EventArgse){txtAuthor.Text="";txtCbs.Text="";txtDate.Text="";txtJg.Text="";txtName.Text="";txtNr.Text="";}protectedvoidLinkButton1_Click1(objectsender,EventArgse){stringimg="no.gif";stringaddbook="insertintobook(name,jg,cbs,author,type_1,type_2,class,neirong,date_1,img)values('"+txtName.Text+"','"+txtJg.Text+"','"+txtCbs.Text+"','"+txtAuthor.Text+"','"+ddlD.SelectedValue.ToString()+"','"+ddlC.SelectedValue.ToString()+"','"+DropDownList1.SelectedValue.ToString()+"','"+txtNr.Text+"','"+Convert.ToDateTime(txtDate.Text)+"','"+img+"')";try{SqlCommandcom=newSqlCommand(addbook,con);con.Open();com.ExecuteNonQuery();Label1.Text="保存成功!";//Response.Write("<script>alert('保存成功')</script>");//Response.Redirect(Request.Url.ToString());}catch{Label1.Text="保存失败!";}}//联动publicDataSetgetdata(){stringtype="";if(ddlD.SelectedValue=="A"){type+="select*fromtype_2wheretype_YJ='A'";}if(ddlD.SelectedValue=="G"){type+="select*fromtype_2wheretype_YJ='G'";}if(ddlD.SelectedValue=="B"){type+="select*fromtype_2wheretype_YJ='B'";}if(ddlD.SelectedValue=="L"){type+="select*fromtype_2wheretype_YJ='L'";}if(ddlD.SelectedValue=="N"){type+="select*fromtype_2wheretype_YJ='N'";}if(ddlD.SelectedValue=="K"){type+="select*fromtype_2wheretype_YJ='K'";}if(ddlD.SelectedValue=="M"){type+="select*fromtype_2wheretype_YJ='M'";}if(ddlD.SelectedValue=="I"){type+="select*fromtype_2wheretype_YJ='I'";}SqlDataAdapterda=newSqlDataAdapter(type,con);DataSetds=newDataSet();da.Fill(ds);returnds;}publicvoidbind_2(){DataSetds=getdata();ddlC.DataSource=ds;ddlC.DataTextField="type";ddlC.DataValueField="typeid";ddlC.DataBind();}}ddlC.DataTextField="type";ddlC.DataValueField="typeid";ddlD是第一个DropDownListddlC是第二DropDownList这俩个属性我也设置了但是还是不行帮帮忙把急!!!!!!!!
解决方案
解决方案二:
if(!this.page.ISPostBack){if(Session["admin"]==null){//Response.Redirect("../ST_contraller.aspx?cname=noadmin");}bind_2();}
解决方案三:
你把bind_2()写pageload事件里了,应放在(!PagePostBack)里
解决方案四:
实现联动应写在ddl1的selectindexchanged事件里
解决方案五:
以上两者的方法都可以使用!关键的问题是你应该搞清楚,如果你不写!Page.Isposebackpage_load部分会每次页面事件触发都会先走的跟踪调试一下你就知道了!
解决方案六:
不行呀试了写在if(!Page.Isposeback)里后可以取到ddl2了但是不能联动了第一个选了后第二个就不变了!!!!大家帮忙再给出出点子..谢谢啦
解决方案七:
publicvoidbind_2(){DataSetds=getdata();ddlC.DataSource=ds;ddlC.DataTextField="type";ddlC.DataValueField="typeid";ddlC.DataBind();}===============改为:publicvoidbind_2(){DataSetds=getdata();for(inti=0;i<ds.Tables[0].Rows.Count;i++){object[]obj=ds.Tables[0].Rows[i].ItemArray;//假设你的type对应的是第1列,typeid对应的是第二列,则ddlC.Items.Add(newListItem(obj[0].ToString(),obj[1].ToString()));}}
解决方案八:
实现联动应写在ddl1的selectindexchanged事件里对阿
解决方案九:
你的代码不管从任何方面看,都是值得扔掉的,建议在开始学程序的时候就养成好的代码习惯.可读性差,无注释,随便乱命名,一大排不必要的if排列;简洁性差,写了不少废码;安全性差,可以写出100种方式通过注入攻击你的代码取得服务器控制权;维护性差,硬编码连接串,硬编码数据值(这里完全不必要)逻辑性差,事件代码(ddl1选择)没有写在对应的事件处理函数而写在页面加载里;封装性差,公开了不该公开的方法;资源效率差,用完数据库都不关连接的(虽然由于本页内对同一连接用了适配器,适配器有可能帮你关掉连接(也有可能不关)~~~~)自己开的连接自己第一时间关掉是基本要求.