前台代码:
<tr>
<td style="width:20%">
部门:
</td>
<td>
<asp:DropDownList ID="dpDept" runat="server" Width="81%">
</asp:DropDownList>
</td>
</tr>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
DADAL dal = new DADAL();
DropDownList dpdept = FindControl("dpDept") as DropDownList;
dpdept.DataSource = dal.GetDEPT();
dpdept.DataTextField = "DEPT_NAME";
dpdept.DataValueField = "DEPT_CODE";
dpdept.DataBind();
}
数据库:
用户界面:
我想实现在界面“部门”里选择不同的部门时对应的
string dept = this.dpDept.SelectedValue;这个值读取到对应的DEPT_CODE值,这样就可以将dept写进查询条件里。
问题:每次运行时,在界面无论选择哪个部门,那个dept值都是16,就是
dpdept.DataValueField = "DEPT_CODE";绑定不成功,我哪里没有注意吗?
请大家帮忙!
把page_load里面的语句包在if(!ispostback)里面
太谢谢你了!万分感谢,我弄了一下午没找到原因,现在成功了!
能告诉我if(!ispostback)到底有啥意义吗?好像有很多的代码都必须放在这个里面才能实现功能。再次感谢!
@pengjw:
页面有两种访问方式,1直接访问,2页面中的控件发起的页面postback
不管哪种方式都会执行page_load里面的函数
如果绑定是直接写在这里面的话,页面中的控件会重新绑定
@飞来飞去: 我明白了,也就是我每次点击控件运行程序的时候pageload里面的都会执行一下?而if(!postback)里的只在第一次加载页面时执行,是这样的吗?
@pengjw: 基本就是这样,所以用服务器控件的少了
一个隐藏值 一个显示出来
那sql语句必须有两个查询条件,你看看你那个条件传过去没
不懂,“那sql语句必须就有两个表了”,那个GetDept()方法:
public DataSet GetDEPT()
{
string sql = "select * from DA_DEPT";
DataSet ds = OracleHelper.ExecuteQuery(sql);
return ds;
}
@pengjw: 加个断点在return ds那 看看ds里的datetable里都是什么数据 看看有没有DEPT_NAME和DEPT_CODE 有就得调试前台页面了
谢谢。今天刚刚碰到这个问题,isPostBack的原理一直都不是很明白的。
基本上明白了,被这个东西搞糊涂了。
还有人关注这个问题吗?我今天遇到了,按照楼主提示,把page_load里面的语句包在if(!ispostback)里面没有效果呢!