窗体有哪几种视模式-各具有什么作用

近期关于窗体有哪几种视模式?各具有什么作用的讨论热度持续攀升,我们通过多方渠道收集整理了相关资讯 ,并进行了系统化的梳理。若这些内容恰好能为您提供参考,将是我们最大的荣幸 。

设计视图 、窗体视图、数据表视图、数据透视表视图。

1 、设计视图

是用来创建或修改窗体的大小的。

2、窗体视图

是能够同时输入、修改和查看数据的窗口 。

3 、数据表视图

数据表视图以表格的形式显示表、窗体、查询中的数据。

4 、数据透视表视图

数据透视表视图使用“OFFICE数据透视表”组件,易于进行交互式数据分析。

窗体用途:

1 、数据的查看与输入 。

2、控制应用程序的流程。

3、自定义对话框:为用户提供系统的信息。

4 、打印数据库信息 。

5、可以通过“填写窗体 ”使文档受保护且不能复制 。

以上内容参考:百度百科-窗体

5.ASP.NET页面主要包括哪几个部分?

 这一节继续来谈 NET中的数据绑定表达式

 本节涉及的内容如下

  一 数据绑定方法的来源以及在低层上的实现

  二 数据绑定方法的执行效率排序

 <%#Container DataItem%><%#GetDataItem()%><%#Eval( 字段名 )%><%#DataBinder Eval(Container DataItem 字段名 )%><%#((DataRowView)Container DataItem)[ 字段名 ] %><%#((Type)Container DataItem) 成员 %><%#((Type)GetDataItem()) 成员 %> 上面七种绑定形式以及它们的变幻形式都用过吗?性能怎么排序?

 复习一下 第一节我们主要谈了数据绑定表达式的各种形式 在ASP NET页面中出现的位置 以及我们常绑定到与数据库有关的DataView DataTable DataSet 等数据源的数据绑定表达式的各种形式

 你有没有对Eval方法和DataBinder Eval方法好奇过?

 在 NET 中我们经常用Eval方法在Repeater DataList GridView等循环控件中绑定数据 Eval方法和DataBinder Eval方法在低层是怎么实现的?它们到底有什么千丝万缕的关系?

  一 来源 实现

 我们常用的Eval方法其实是Page类的一个静态单向只读方法 而且它是一个受保护的方法 实际上Page类的Eval方法是继承自TemplateControl类的 TemplateControl 类是一个抽象类 它为Page 类和 UserControl 类提供通用属性和方法 我们先来看一下继承家谱

 System Object System Web UI Control  System Web UI TemplateControl System Web UI Page System Web UI UserControl Eval方法就是TemplateControl类的方法 它有两种形式

  ?名称 ?说明 ?TemplateControl Eval (String) ?计算数据绑定表达式 ?TemplateControl Eval (String String) ?使用用于显示结果的指定格式字符串计算数据绑定表达式

 事实上TemplateControl类还提供了XPath方法和XPathSelect方法供Page类和UserControl继承 这 个方法是和XML数据源有关的绑定方法

 如果细心的你查看TemplateControl类的基类Control类 你就会发现其实Control类并没有提供Eval XPath XPathSelect等方法 所以Eval XPath等方法最终是在TemplateControl类中实现的

 现在 终于找到了Eval XPath等数据绑定方法的来源了

 Eval XPath等方法是 NET 新增的方法 在 NET 时代我们经常用的是DateBinder Eval方法 形如

 <%#DataBind Eval(Container DataItem 字段名 ) %>

 <%#DataBind Eval(Container DataItem 字段名 { c} ) %>

 Eval的出现其实就是为了简化DataBinder Eval方法的写法从而代替它

 在ASP NET 中及以上 当我们调用Eval时 Eval 方法会使用GetDataItem方法调用DataBinder Eval方法计算表达式的值 要想理解这句话 就算查边MSDN也一头雾水 除非我们知道Eval方法的源代码 否则根本找不到蛛丝马迹 这里就要用到反射了 我们通过反射获得了Eval方法的源代码

 protected internal object Eval(string expression)

 {

 this CheckPageExists()

 return DataBinder Eval(this Page GetDataItem()  expression)

 }

 终于见到GetDataItem()方法了 其实它就是Page类的一个方法 也是 NET 新增一个方法 GetDataItem()方法的作用是为了获得Container DataItem 它是 NET 中用来代替Container DataItem的 如果你曾经用Repeater和DataList等绑定过数组或者ArrayList等 你就会发现<%#GetDataItem()%>和<%#Container DataItem%>等价 同时 可以肯定 Eval方法在低层上确实是调用DataBinder Eval方法实现数据绑定的 其中 this CheckPageExists() 是检查调用的时候有没有Page对象的 如果没有则会抛出一个异常

 要弄清Eval是怎么工作的 GetDataItem()方法的低层实现我们也要用反射来获取

 public object GetDataItem()

 {

 if ((this _dataBindingContext == null) || (this _dataBindingContext Count == ))

 {

 throw new InvalidOperationException(SR GetString( Page_MissingDataBindingContext ))

 }

 return this _dataBindingContext Peek()

 }

 我们从GatDataItem()方法中看到 return this _dataBindingContext Peek() 很快就猜想_dataBindingContext是不是一个堆栈呢?事实它就是一个堆栈!通过反射查看源代码我们得出 _dataBindingContext是一个Stack类型对象 所以它有Peek方法 return this _dataBindingContext Peek() 正是把堆栈顶部的元素返回 而if语句是用来判断这个堆栈是否已经存在或者是否已经有元素存在 如果if不成立 就会抛出一个异常

 从上面的分析我们知道 _dataBindingContext堆栈的作用是通过GetDataItem()方法这个桥梁向Eval方法提供Container DateItem 用逆向思维来理解上面这句话 Eval方法可以自动计算出Container DataItem 原因就是从dataBindingContext堆栈来获取Container DataItem 这也就为什么Eval方法能够知道形如<%#Eval 字段名 %>中字段名隶属于哪个数据项的属性的原因 同时我们也知道 NET 中的Eval在本质上的实现并没有抛弃Container DataItem 而Container DataItem在 时代也没有消失

 那么_dataBindingContext这个保存Container DataItem的堆栈是怎么建立的呢?

 我们很快就想到每次绑定控件时候最后那条语句是什么 this 控件ID DataBind() 对就是DataBind()方法 DataBind()方法还有一个重载 DataBind(bool raiseOnDataBinding) 为_dataBindingContext这个堆栈压入元素和弹出元素的方法正是用DataBind(bool flag)这个重载方法实现的

 DataBind(bool raiseOnDataBinding)在低层的实现

 protected virtual void DataBind(bool raiseOnDataBinding)  {  bool flag = false;//这个标志的用处在上下文中很容易推出来 如果有DataItem压栈 则在后面出栈 if (this IsBindingContainer)//判断控件是不是数据绑定容器 实际上就是判断控件类是不是实现了INamingContainer  {  bool flag ;  object obj = DataBinder GetDataItem(this out flag );//这个方法是判断控件是不是有DataItem属性 并把它取出来 if (flag && (this Page != null))//如果控件有DataItem  {  this Page PushDataBindingContext(obj );//把DataItem压栈 PushDataBindingContext就是调用_dataBindingContext的Push方法  flag = true;  }  }  try  {  if (raiseOnDataBinding)//这里是判断是不是触发DataBinding事件的 {  this OnDataBinding(EventArgs Empty);  }  this DataBindChildren();//对子控件进行数据绑定 如果这个控件有DataItem 则上面会将DataItem压入栈顶 这样 在子控件里面调用Eval或者GetDataItem方法 就会把刚刚压进去的DataItem给取出来 }  finally  {  if (flag )//如果刚才有压栈 则现在弹出来 {  this Page PopDataBindingContext();//PopDataBindingContext就是调用_dataBindingContext的Pop方法  }  }  }  当我们执行到this 控件ID DataBind() 时候 在低层上就会调用这个重载的方法来准备包含DataItem的_DatBindingContext堆栈

 上面的代码中提到了DataBinding事件 那么它一般什么时候被触发呢?

 1 如果用编程方式 那么在我们调用DataBind()方法时候自动触发DataBinding事件

 2 如果我们用数据源控件(例如SqlDataSource等) 当把控件绑定到数据源控件时候 这个事件就会自动触发

 一般数据绑定表达式常常放在模板中循环显示数据 例如Repeater和DataList等的模板 那么下面这个知识点应该知道 Repeater DataList FormView等控件必须使用模板 如果不使用模板 这些控件将无法显示数据 而GridView DetailsView Menu等控件也支持模板 但显示数据时不是必须的 而TreeView控件不支持模板

 注意 一般情况下 数据绑定表达式不会自动计算它的值 除非它所在的页或者控件显示调用DataBind()方法 DataBind()方法能够将数据源绑定到被调用的服务器控件及其所有子控件 同时分析并计算数据绑定表达式的值

 终于写的有点眉目了 好累!我们该回头看看Eval方法调用的静态DataBinder Eval方法在低层的实现了 我把DataBinder类的源代码作为附近提供下载

  二 执行效率

 从 一 讲述的低层实现 我们很容易来排序下面数据绑定表达式的执行效率<%#Container DataItem%><%#GetDataItem()%><%#Eval( 字段名 )%><%#DataBinder Eval(Container DataItem 字段名 )%><%#((DataRowView)Container DataItem)[ 字段名 ] %><%#((Type)Container DataItem) 成员 %><%#((Type)GetDataItem()) 成员 %> 效率最高应该是 <%#((Type)Container DataItem) 成员 %><%#Container DataItem%><%#((DataRowView)Container DataItem)[ 字段名 ] %> 效率排第二的是 <%#((Type)GetDataItem()) 成员 %><%#GetDataItem()%> 效率最低的是 <%#Eval( 字段名 )%><%#DataBinder Eval(Container DataItem 字段名 )%> 其实按上面的排序有失公允 原因是这七种数据表达绑定形式运用的场合不是完全相同的

 使用场合大概如下

  |<%#Eval( 字段名 )%><%#DataBinder Eval(Container DataItem 字段名 )%> 它们的使用场合最广 数据源可以为与数据库有关的DataSet DataTable DataView 也可以为普通集合(例如 数组 ArrayList HashTable等)和泛行集合(例如 List<T> Dictionary<Tkey Tvalue>等)

 注 它们 个永远可以相互替换 至少目前是这样 凡是可以用Eval方法的地方 就可以用DataBinder Eval方法替换 从低层实现上 Eval比DataBinder Eval方法效率稍低 原因是Eval方法对了调用GetDataItem()方法这一步 但最终都是通过DataBinder Eval方法利用反射技术根据名称查找属性 从而计算出表达式的值 所以非常影响性能

 

 <%#((DataRowView)Container DataItem)[ 字段名 ] %>

 它只能使用在数据源为与数据库有关的Dataset DatTable DataView 这些数据源都实现了IListSource接口 其实从低层实现本质上来看 它和<%#((Type)Container DataItem) 成员 %>类似

lishixinzhi/Article/program/net/201311/11866

ASP.NET技术从1.0版本升级到1.1变化不是很大。然而 ,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情。ASP.NET 2.0技术增加了大量方便、实用的新特性 。ASP.NET 2.0主要提供控件 、页面框架、服务与APIs等3个方面的技术特性。

ASP.NET 2.0新特性之控件

在ASP.NET 1.x时代,由于内置服务器控件数量有限、功能覆盖面窄 ,因此,开发人员怨声载道。为了消除这个技术软肋,ASP.NET 2.0做出了突破性改进 。在ASP.NET 2.0中 ,新增数十个服务器控件。根据控件功能特征 ,可分为:数据控件(包括数据源控件和数据绑定控件) 、登录系列控件、Web部件、站点导航控件和其他控件等。这些服务器控件对于提高工作效率,降低开发成本有着重要作用 。

ASP.NET 2.0新特性之页面框架

在页面框架方面,ASP.NET 2.0同样做出了重大改进 ,主要体现在以下4项技术特性:母版页 、主题和皮肤、编译机制和本地化。母版页特性在大型Web站点中应用广泛,它能够在一定程度上代替框架页功能,从而迅速建立具有统一布局和外观的页面 ,并且有效降低维护人员的工作强度。主题和皮肤是ASP.NET 2.0的一项新增功能,使用此功能可以一次性设置一种类型的服务器控件外观样式 。该外观可方便地应用于单个页面、整个Web应用程序,甚至整个服务器。在应用程序编译方面 ,ASP.NET 2.0提供了几种替代方案,从而扩大了编译的选择范围,开发人员可以根据特定需要进行选择。另外 ,ASP.NET 2.0在本地化方面也做出了一些改进 。

ASP.NET 2.0新特性之服务与APIs

这个部分包括的新特性在ASP.NET 2.0中占有较大比例,主要包括成员资格管理 、角色管理 、用户配置、数据缓存、配置与管理工具等 。利用这些功能,可以快速实现用户和角色管理 、个性化用户配置、数据缓存、应用程序可视化配置等任务。以成员资格和角色管理功能为例 ,在ASP.NET 1.x时代 ,实现这两项功能是比较繁琐和困难的;而在ASP.NET 2.0中不仅提供默认数据库表,而且只需调用几个简单的方法,就能够轻松地实现成员和角色管理功能。

一 、新增服务器控件

在ASP.NET 1.x时代 ,有很多开发人员对其中的内置服务器控件提出批评 。主要的观点是ASP.NET 1.x提供的控件数量太少,难以满足日益增长的开发需求,无法更快更好地开发应用程序。为了弥补ASP.NET 1.x的不足 ,ASP.NET 2.0新特性之中新增了数十个服务器控件。根据控件功能,可以分为站点导航控件、数据控件(包括数据源控件和数据绑定控件)、登录系列控件 、Web部件和其他服务器控件等 。熟练使用这些服务器控件对于提供工作效率、减低开发成本有着重要意义。

1、站点导航控件

在ASP.NET 1.x时期,微软发布了一组IE Web Control控件(非内置控件) ,其中包括一个实现树形结构的TreeView控件,它就是典型的站点导航控件。在ASP.NET 2.0中,不仅包含和扩展了原有的TreeView ,而且还新增了另外两个控件 。

站点导航控件主要用于实现站点页面导航功能。站点导航控件包括SiteMapPath 、Menu和TreeView控件。SiteMapPath控件能够根据站点导航信息,准确定位当前页面所处整个Web站点的位置,同时 ,使用层次化表示方法 ,将位置信息显示为有序的静态文本或者超链接 。另外,还可以通过调整相关属性,自定义位置信息的外观以及实现数据绑定等功能。Menu控件可构建与Windows应用程序类似的菜单。该控件不仅可与多种数据源控件集成 ,而且还可以支持自定义外观、事件处理等功能 。TreeView控件主要用于显示树形结构,该树与Windows资源管理器中的树类似 。同时,该控件还支持数据绑定、自定义外观等功能。

2 、数据控件

ASP.NET 2.0的数据控件可细分为两类:一类是数据源控件 ,另一类是数据绑定控件。数据源控件包括SqlDataSource 、AccessDataSource、XmlDataSource、SiteMapDataSource和ObjectDataSource 。这些控件主要实现连接不同数据源 、数据检索和修改功能,例如,查询、排序、分页 、筛选、更新、删除和插入等。数据绑定控件主要包括GridView 、DetailsView和FormView等。这些控件可与数据源控件配合 ,将获取的数据以不同形式显示在页面上 。由于数据源控件和数据绑定控件支持良好的可视化设计时功能,因此,当利用Visual Studio 2005实现数据访问时 ,甚至不需要编写任何代码就能够完成任务。

3、登录系列控件

很多Web站点都提供了用户登录验证以及相关功能。常见功能包括用户登录、创建新用户等 。总体而言,实现这些功能的基本方法比较类似,然而 ,由于开发人员的水平差异 ,可能造成一些不必要的漏洞和错误。为了解决这个问题,ASP.NET 2.0新特性之中将与登录验证相关的实现集成为登录系列控件。这些控件包括:Login 、LoginName、LoginView、LoginStatus 、PasswordRecovery 、ChangePassword和CreateUserWizard 。利用这些控件可以轻松实现登录验证、创建新用户、显示登录状态 、显示登录用户名、更新和重置密码等。出于灵活性考虑,登录系列控件不仅提供了大量成员对象 ,而且还支持自定义模板功能(部分控件支持)。另外,登录系列控件还加强了安全方面的控制 。例如,默认情况下 ,登录系列控件是以纯文本形式工作于HTTP上 。如果应用程序对安全性十分关注,那么可以使用带SSL加密的HTTPS。

Login控件用于实现用户登录验证,CreateUserWizard控件用于创建新用户。可能读者会沿袭ASP.NET 2.0之前的思路 ,认为实现以上两种应用需要添加多个文本框、按钮等元素,并设计实现数据库 、数据访问逻辑等 。实际上,使用Login和CreateUserWizard控件实现以上应用 ,非常简单,简单到不需要编写任何代码,不需要自建数据库 ,只需添加和设置控件即可。

4、web部件

Web部件是ASP.NET 2.0新特性之中新增特性。如果曾经开发应用过SharePoint ,那么对Web部件应该不会感到陌生 。ASP.NET 2.0的Web部件功能包括多个服务器控件,例如,实现WebPart控件管理和控制的WebPartManager、实现编辑WebPart控件的EditorZone和EditorPart系列控件 、实现目录管理的CatalogZone和CatalogPart系列控件、实现WebPart通信的ConnectionZone控件等。利用它们可以创建具有高度灵活性和个性化的Web站点。

5、其他服务器控件

除上文介绍的4类控件之外 ,ASP.NET 2.0新特性之中增加了其他服务器控件 。这些控件包括BulletedList 、HiddenField、FileUpload、ImageMap 、MultiView(View)和Wizard。

二 、母版页

每个站点都应具有统一的风格和布局。不同技术时代,给出了不同的解决方案 。例如,在ASP技术时期 ,使用#include命令,在ASP.NET 1.x时期,主要使用用户控件。ASP.NET 2.0技术时期 ,则可以使用构建页面布局框架的技术特性—母版页。

母版页是扩展名为.master的文件,其代码内容和结构与普通.aspx文件类似 。注意代码中包括一个或多个ContentPlaceHolder控件 。在创建母版页时,需要将页面公共部分存储于母版页中 ,例如,页面公用的页头、页尾等,而页面非公共部分则使用ContentPlaceHolder控件实现占位。内容页文件虽然扩展名为.aspx ,但是代码内容和结构与普通.aspx文件代码相距甚远 ,其代码分为两个部分:代码头声明一个或多个Content控件。开发人员需要在内容页代码头绑定母版页,同时,将页面非公共部分内容设置在Content控件标签之间 。在运行时 ,用户不能直接请求母版页,只能请求访问内容页。此时,母版页和内容页将合并生成结果页 ,结果页面包含页面公共部分和非公共部分的运行结果。

三、主题和皮肤

在未接触主题和皮肤功能之前,你可能已经习惯于使用级联样式表(CSS)设置页面和控件等元素外观和样式 。虽然在ASP.NET 1.x开发中,CSS同样适用 ,但是如果碰到一些复杂控件,例如,Calendar 、GridView ,那么设置CSS将变得比较困难。如果能够完全根据控件自身外观和样式属性,而不仅限于CSS中规定元素,来设置服务器控件 ,那么整个实现过程将变得比较简单。ASP.NET 2.0中的主题和皮肤功能就能够提供这样的便利 。

所谓“主题”是指页面和控件外观属性设置的集合。主题由一组文件构成 ,可能包括皮肤文件、CSS文件、和其他资源等。这些文件必须存储在App_Themes文件夹中 。皮肤文件是主题的核心内容。这种文件的扩展名为.skin,其中包含各种服务器控件的各种属性设置。利用主题功能,不仅能够定义页面和控件的外观 ,还可以在所有Web应用程序 、单个Web应用程序的所有页面或者单个Web页面中,快速一致地应用所定义外观 。另外,还可以根据应用程序需要动态加载主题 。

四、个性化用户配置

存储和访问用户配置数据一直是开发人员关注的热点。在ASP.NET 1.x时代 ,实现这一功能主要通过Session、Application等对象或者采用数据库存储的方法。这两种方法都有着本身不可克服的缺点 。例如,使用前者容易发生数据丢失的情况,而使用后者比较繁琐 ,例如,需要自行设计实现数据库及访问数据的代码。为了解决以上问题,ASP.NET 2.0新增了个性化用户配置功能。

个性化用户配置功能主要用于存储单个用户配置数据 ,这些数据可以是简单数据类型,也可以是复杂数据类型,甚至自定义对象等 。同时 ,单个用户既可以是匿名用户 ,也可以是注册用户。默认情况下,所有用户配置数据都存储在SQL Server数据库中,并且无需自行创建和维护该数据库 ,这些工作都由ASP.NET 2.0自动完成。个性化用户配置功能还支持从应用程序中任何位置访问的多种强类型API,以方便存储 、显示和管理用户配置信息 。使用个性化用户配置功能非常简单。首先,在Web.config文件中定义配置信息名称、数据类型等 ,然后,调用与用户配置功能有关的强类型API,例如 ,Profile实现对用户配置信息的存储、访问和管理等应用。

五 、成员资格和角色管理

多数站点的后台管理中,几乎都包括用户成员和角色管理功能,例如 ,新建、修改、删除用户和角色,为用户设置角色,管理角色中的用户等 。在使用ASP.NET 1.x版本时 ,实现这些功能的主要方法是 ,首先,设计创建成员库表 、角色库表等,然后 ,编写代码实现具体功能。实现所有功能可能需要花费不少的时间和精力,并且过程繁琐,容易出现错误。然而 ,使用ASP.NET 2.0新增的成员资格和角色管理功能则可以很好地解决这个问题 。

成员资格和角色管理功能的核心是利用自动生成的数据库表 、多个实现管理功能的API、成员资格和角色管理提供程序,实现模块化和自动化的成员资格和角色管理模式 。具体而言,包括创建和管理用户和角色信息、实现对多种数据源中用户和角色信息的管理 、验证访问应用程序的用户凭证、支持使用Cookie缓存角色信息、实现角色管理与成员资格管理等功能的集成。

六 、配置和管理工具

为了快速方便地实现应用程序配置和管理 ,ASP.NET 2.0新特性之中提供了两个内置的可视化工具:一个是ASP.NET MMC管理单元,另一个是Web网站管理工具。

如果计算机中安装了Internet信息服务(IIS)和.NET Framework 2.0,那么打开IIS即可使用ASP.NET MMC管理单元 。利用该工具可对指定应用程序的连接字符串、应用程序配置、自定义错误 、授权、身份验证、公共编译 、页和运行时、全球化和标识、应用程序状态 、位置等方面进行全面设置。所有设置结果都将显示在应用程序Web.config文件中。从这一角度而言 ,ASP.NET MMC管理单元是一个用于编辑Web.config文件的图形化工具 。

如果使用Visual Studio 2005创建ASP.NET 2.0应用程序,那么可以调用Web站点管理工具。与ASP.NET MMC管理工具不同的是,Web站点管理工具是一个Web应用程序 ,而不是一个Windows应用程序。Web站点管理工具提供了对指定Web应用程序的安全 、应用程序配置、提供程序等多方面的设置 。例如 ,创建管理用户和角色信息、设置SMTP参数 、设置各种提供程序等。

关于窗体有哪几种视模式?各具有什么作用的探讨就到这里,您是否还有其他想了解的内容?欢迎在评论区留言告诉我们,同时别忘了点击关注哦!

(4)

猜你喜欢

发表回复

本站作者才能评论

评论列表(3条)

  • 诚晋号的头像
    诚晋号 2026年08月04日

    我是诚晋号的签约作者“诚晋号”

  • 诚晋号
    诚晋号 2026年08月04日

    本文概览:近期关于窗体有哪几种视模式?各具有什么作用的讨论热度持续攀升,我们通过多方渠道收集整理了相关资讯,并进行了系统化的梳理。若这些内容恰好能为您提供参考,将是我们最大的荣幸。设计视...

  • 诚晋号
    用户080401 2026年08月04日

    文章不错《窗体有哪几种视模式-各具有什么作用》内容很有帮助

联系我们:

邮件:诚晋号@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

关注微信