手机版

ASP.NET 2.0中的运营数据十四:使用表单视图模板

时间:2021-11-01 来源:互联网 编辑:宝哥软件园 浏览:

介绍

在前两个教程中,我们看到了如何使用TemplateField自定义GridView和DetailsView的输入。TemplateField使我们能够高度自治地定义一个特定的列,但是无论是GridView还是DetailsView,它都会有点过于规则。简单来说,它们都有和方形网格一样的外观。在很多情况下,这样的网格状外观非常好,但有时我们需要使用不规则的显示外观。当需要显示单个记录时,FormView控件可以实现这种更随意的外观。

与DetailsView不同,FormView不是由各种列组成的。不能将边界字段或模板字段添加到窗体视图中,但窗体视图是使用模板呈现的。我们可以将FormView理解为只有一个TemplateField的DetailsView控件。FormView支持以下模板:

项目模板用于在表单视图中显示特殊记录。

标题模板用于指定可选的标题行。

页脚模板用于指定可选的页脚行。

EmptyDataTemplate当FormView的数据源缺少记录时,EmptyDataTemplate将替换它。

ItemTemplate生成控件的标记语言。

分页模板如果在FormView中启用了分页,该模板可用于自定义分页界面。

编辑项目模板/插入项目模板如果FormView支持编辑或插入功能,这两个模板可用于自定义相关界面。

在本教程中,我们将解释如何使用FormView控件向产品呈现不规则的外观。表单视图的项目模板将使用标题元素和表格的组合来显示名称、类别、供应商等的值。而不是使用各种列(如图1所示)。

//files.jb51.net/file_images/article/201605/2016050616543974.png

图1: FormView打破了DetailsView类似网格的外观。

步骤1:将数据绑定到FormView。

打开“窗体视图. aspx”页面,将窗体视图从工具箱拖到设计器中。当FormView刚添加到页面中时,它是一个灰色的正方形,这告诉我们它需要一个ItemTemplate。

//files.jb51.net/file_images/article/201605/2016050616543975.png

图2:在添加项目模板之前,表单视图不会出现在设计器中。

您可以通过手动编写代码(在源视图中)来添加ItemTemplate,也可以通过将FormView绑定到设计器中的数据源控件来自动添加它。这个自动生成的项目模板包含用于显示字段名称的HTML代码,以及用于显示字段值的标签控件。当然,这些标签控件的文本属性已经绑定到相应的字段。此操作还会生成一个InsertItemTemplate和一个EditItemTemplate,它们为数据源控件的每个字段提供一个输入控件。

如果要自动生成模板,应该首先使用ProductsBLL类的GetProducts()方法将ObjectDataSource控件添加到FormView中。您可以通过FormView的智能标记来实现这一点。这样,您就可以创建一个包含项目模板、插入项目模板和编辑项目模板的表单视图。在源视图中,删除InsertItemTemplate和EditItemTemplate,因为我们现在对创建可编辑和可插入的FormView不感兴趣。然后,清空ItemTemplate中的标记语言代码,这样我就可以在干净的环境中工作了。

如果您喜欢手动创建项目模板,可以将对象数据源从工具箱拖到设计器中并进行配置。这里,不要在设计器中为FormView添加数据源。我们应该手动将ForView的DataSourceID属性设置为源视图中ObjectDataSource的ID,然后手动添加ItemTemplate。无论您决定使用哪种方式,表单视图的声明标记代码最终都应该是这样的:

asp: FormView ID=' FormView 1 ' runat=' server ' DataSourceID=' objectdata source 1 ' item template/item template/asp3360 FormView需要一些时间来勾选FormView的智能标记中的“启用分页”复选框,以便在FormView的声明标记代码中添加AllowPaging='True '的属性。此外,将EnableViewState属性设置为false。

第二步:定义项目模板的标记。

在将FormView绑定到ObjectDataSource控件并将其配置为支持分页之后,我们就可以指定ItemTemplate的内容了。在本教程中,让我们在h3中显示产品名称。然后让我们使用table在一个四列表中显示剩余的产品属性,其中第一列和第三列用于显示产品属性的名称,第二列和第四列用于显示产品属性的值。

您可以通过FormView的模板编辑界面或在源代码视图中手动输入代码,在设计器中添加这些标记代码。当使用模板时,我发现直接在源代码视图中编码会更快,但是您可以使用任何让您感觉足够好的方式。下面的声明标记代码显示了在完成ItemTemplate的结构后FormView应该是什么样子:

asp3360 formview ID=' formview 1 ' runat=' server ' DataSourceID=' objectdata source 1 ' allow paging=' True ' EnableViewState=' False ' item template HR/H3 % # Eval(' product name ')%/H3表边框='0' tr td类=' productproperty label ' category 3360/TD类=' productproperty value ' % # Eval(' CategoryName ')%/TD TD类=' productproperty label ' supplier 3360/TD以%# Eval('ProductName')%为例。——可以直接插入模板的输出。这是因为它不必绑定到Label控件的Text属性。例如,如果我们想使用h3%# Eval('ProductName') %/h3在h3元素中显示ProductName的值,那么产品“Chai”将作为h3Chai/h3输出。

类CSS ProductPropertyLabel和ProductPropertyValue用于指定表中产品属性的名称和值的样式。这些CSS类是在Styles.css中定义的,它们使产品属性的名称加粗并右对齐,它们还为产品属性的值添加了一个右填充。

FormView中没有CheckBoxField,所以如果我们想将Discontinued的值显示为CheckBox,我们必须自己添加一个CheckBox控件。将此CheckBox控件的“已启用”属性设置为false,使其成为只读,并将其“已检查”属性绑定到“已中断”字段。

完成项目模板后,产品信息会以更不规则的方式显示。将上一节中DetailsView的输出(图3)与本节中讨论的FormView的输出(图4)进行比较。

//files.jb51.net/file_images/article/201605/2016050616543976.png

图3:僵硬的DetailsView输出。

//files.jb51.net/file_images/article/201605/2016050616543977.png

图4:软表单视图输出。

摘要

虽然GridView和DetailsView控件可以使用TemplateField自定义它们的输出,但是它们都像网格一样是正方形的。当需要不规则的外观来显示单个记录时,FormView是一个理想的选择。像DetailsView一样,FormView显示数据源中的一条记录。但是,它与DetailsView的不同之处在于,它只由模板组成,并且它根本不支持字段。译者注:例如,CheckBoxField。

正如我们在本节中看到的,FormView提供了一种更复杂的方式来呈现单个记录。在未来的教程中,我们将解释DataList和Repeater控件,它们可以提供与FormView一样复杂的演示,但它们可以显示多列(就像GridView一样)。

编程快乐!

关于作者

斯科特米切尔,六本关于ASP/ASP的书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。Scott是一名独立的技术顾问、培训师和作家,最近完成了一部即将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电子邮件是[emailprotected],也可以通过他的博客http://ScottOnWriting.NET联系到他。

版权声明:ASP.NET 2.0中的运营数据十四:使用表单视图模板是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。