2008-11-26 92 views
1

我已经创建了一个自定义服务器控件(从GridView继承)。ASP.NET自定义服务器控件(GridView),DataBinding和控件生命周期冲突

在页面上,GridView是DataBound到DataSet,所以我不知道在设计时GridView中将出现什么列。

现在,我想要做的是,在GridView标题行的每个单元格中添加一个文本框,并且这些文本框将控制列过滤。 (使用GridView OnRowCreated方法添加文本框)。

到目前为止,文本框出现了,过滤工作正常。

问题是,在每次回发后,文本框的文本值丢失。从我的实验中,这似乎是因为我在Page/Control生命周期中添加了文本框太晚了。

如何处理这种类型的问题,我需要在生命周期的早期创建和添加文本框(比如,GridView的OnInit),但添加文本框取决于稍后在生命周期?

回答

1

为什么不将值存储在ViewState中并在回发中将其读回(重新填充文本框)?

+0

并重新应用过滤器 – Victor 2008-12-05 22:07:38

0

您不必担心文本框的值,只是它们的ID以及创建它们的时间;控制状态(... hmmm ...或者视图状态)将负责其余部分,只要您使用相同数量的文本框和它们各自的(唯一(!))ID创建并“提供”页面。

您可以做到这一点既是Page_Init和Page_Load ... Page_Init是有点建议,但这取决于您的需求。

0

看到一只页面,将是有益的:http://msdn.microsoft.com/en-us/library/ms178472.aspx 它明确说,你需要使用Pre_Init事件创建YOUT控制:

PreInit:使用此事件 以下:

  • 检查IsPostBack属性以确定这是否是页面正在处理的第一个 时间。
  • 创建或重新创建动态控件
  • 动态设置母版页。
  • 动态设置主题属性。
  • 读取或设置配置文件属性值。