摘要
延续前面「GridView+FormView 示范数据新增/修改/删除(进阶篇:服务器控件)」的文章,文章后记有提及若要达到零程序代码要求,上篇已实作「扩展 CommandField 类别 - Header 加入新增钮」解决其中一个问题。另一个问题就要扩展 TextBox 控件,让 TextBox 可以自行判断 FormView 的 CurrentMode 来决定 TextBox 的启用状态,本文接下来就是来说明如何扩展 TextBox 控件来达到此需求。

TBFormViewModeStatus 类别
首先我们先定义 TBFormViewModeStatus 类别,此类别是用来设定控件在每种 FormViewMode 的状态。TBFormViewModeStatus 类别具有 InsertMode、EditMode、BrowseMode 三个属性,分别用来设定 FormViewMode 为 Insert、Edit、ReadOnly 三种情形时,TextBox 控件的启用状态。
 1End Class


扩展 TBTextBox 控件
接下来就是改写 TextBox 控件,我们继承 TextBox 类别命名为 TBTextBox,加入一个 FormViewModeStatus 属性( TBFormViewModeStatus 型别),用来设定控件在每种 FormViewMode 的状态,例如设定 FormViewModeStatus.InsertMode 可以设定 FormViewMode.Insert 情形时,控件状态为「不设定、启用、不启用」三择一。主要的作法是覆写 OnPreRender 方法,在此方法中去呼叫 DoFormViewModeStatus 方法,自行判断 TextBox 所属 FormView 的 CurrentMode 来决定本身的状态。
 1扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System
 2扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.ComponentModel
 3扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.Drawing
 4扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.Web
 5扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.Web.UI
 6扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.Web.UI.WebControls
 7扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态Imports System.Security.Permissions
 8扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态
 9End Namespace

使用 TBTextBox 控件
将 TBTextBox 放置 FormView 的 EditItemTemplate(Edit 及 Insert 共享 Template,即 InsertItemTemplate=EditItemTemplate)中,在 TBTextBox 的属性窗口中就可以直接设定 FormViewModeStatus 属性即可。如此就可以不用麻烦的判断 FormView 的 CurrentMode,又要 FindControl 来做相关设定,就可以真正达到零程序代码的要求了。

扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态

扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态<bee:TBTextBox ID="txtEmployeeID" runat="server" Text='<%# Bind("EmployeeID") %>'>
扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态    
<FormViewModeStatus InsertMode="Enable" EditMode="Disable" />
扩展 TextBox 控件 - 依 FormViewMode 来自行设定状态
</bee:TBTextBox>


相关文章: