CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

想爆头也无法解决的动态绑定控件问题?

楼主xmvb(gqxm)2003-12-01 21:30:48 在 .NET技术 / ASP.NET 提问

一个页面有几个动态生成的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

相关问题

  • 如何动态的绑定dagagrid控件?
  • TDBGrid控件怎样动态绑定Ado.RecordSet?
  • 动态绑定treeview控件的问题!
  • 如何为msdatagrid控件动态绑定数据源?
  • 动态创建的控件如何绑定消息处理?
  • 控件动态绑定事件处理函数的问题
  • datagrid动态绑定数据,怎么用label控件
  • 怎么设置DataGrid表格字段动态绑定Adodc控件?
  • 关于TreeView数型控件动态绑定
  • VB.NET动态生成控件的事件绑定问题

关键词

  • 控件
  • 页面
  • 生成
  • 绑定
  • insertcontrolsbydatabase
  • setcontrolsvalue
  • 动态
  • 记录
  • ispostback
  • dropdownlist

得分解答快速导航

  • 帖主:xmvb
  • xiaha3
  • saucer
  • redlion963
  • yunhi
  • net_lover
  • gOODiDEA
  • LevinForum

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo