想爆头也无法解决的动态绑定控件问题?
一个页面有几个动态生成的textbox,dropdownlist控件,并根据记录号绑定了数据库记录,页面还有两个向前向后的按钮。由于是动态生成,所以每次页面刷新都要重新生成一次控件,现在我想爆头也无法解决的问题是,这个重新生成控件的操作应放到哪里。如果放在page_load里,当点击向前向后按钮改变记录号时,这个重新绑定操作会在改变记录号前已在page_load中发生,使显示记录没变化,如果放到向前向后按钮里,记录可变动,但由于动态生成的控件中的dropdownlist里包含加入的selectindexchange事件,触发这个事件后又必须在page_load重新生成绑定控件。
请问我该怎么办?
问题点数:100、回复次数:9Top
1 楼xiaha3(夏)回复于 2003-12-01 21:48:25 得分 5
upTop
2 楼saucer(思归)回复于 2003-12-01 22:40:47 得分 35
1.use viewstate to recreate the controls in LoadViewState or Page_Load
and
2.dynamically bind your controls in your button's Click Handler or Pre_RenderTop
3 楼redlion963(狮子)回复于 2003-12-01 22:52:56 得分 5
好像也只能放在Page_Load 里Top
4 楼yunhi()回复于 2003-12-01 23:05:10 得分 5
最好放到OnInit事件当中。Top
5 楼net_lover(【孟子E章】)回复于 2003-12-01 23:09:15 得分 20
http://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingwebservercontroltemplatesdynamically.aspTop
6 楼gOODiDEA(无语)回复于 2003-12-02 06:08:31 得分 20
试试
if ( !IsPostBack )
{
//正常操作,创建控件
}
else
{
//创建控件
}
Top
7 楼srj911(人海茫茫)回复于 2003-12-02 08:49:15 得分 0
upTop
8 楼xmvb(gqxm)回复于 2003-12-02 08:51:37 得分 0
如果在page_load和向前向后按钮都绑定一次,会出现重复绑定的错误。
我曾经想用以下方法,但Request.Form(ddl_1.UniqueID)始终没变化,都是""值,但如果DropDownList控件不是动态生成,而是拖拽进来生成的,Request.Form(DropDownList1.UniqueID)是可以被赋值的。
If Not IsPostBack() Then
bind() '生成控件函数
Else
If Not (Request.Form(DropDownList1.UniqueID) Is Nothing) Then
bind() '生成控件函数
End If
End If
Top
9 楼LevinForum(forum.lostinet.com)回复于 2003-12-02 08:52:50 得分 10
这里有几种方案
按你现在的水平,我建议是:
override protected void OnLoad(EventArgs e)
{
base.OnLoad(e);
InsertControlsByDataBase();
if(!IsPostBack)
{
SetControlsValue();
}
}
第二种方案更简单:
override protected void OnInit(EventArgs e)
{
InsertControlsByDataBase();
SetControlsValue();
base.OnInit(e);
}
第三种方案,把控件做到复合控件里,
那么InsertControlsByDataBase放在CreateChildControls里了。
而页面调用是:
Page_Load(...)
{
if(!IsPostBack)
MyComplexContainer().SetControlsValue();
}
当然方法是无尽的,原理是一致的.
Top




