7.4.6  ListView(2)

ListView组的显示

除了Item Container之外,ListView还支持另一个容器类型Group Container。Group Container与GroupTemplate一起使用,可以把较大的数据项组分成小组。每一组中的项数由控件的GroupItemCount属性设置。在显示一定数量的项模板后,要输出一些额外的HTML时,就可以使用GroupTemplate。使用GroupTemplate时,存在与上一节相同的问题。但在这里,不是把两个模板关联起来,引入GroupTemplate意味着要关联3个模板:ItemTemplate关联到GroupTemplate上,GroupTemplate关联到LayoutTemplate上。

ListView显示时,看起来似乎已经定义了GroupTemplate。如果控件找到了GroupTemplate,就确定LayoutTemplate上是否提供了Group Container。如果已经定义了GroupTemplate,控件就要求定义Group Container,否则就抛出异常。Group Container的工作方式与上一节描述的Item Container相同,但Group Container元素的id值应是groupContainer,而不是itemContainer。与Item Container一样,控件查找的特定id值可以通过改变控件的GroupContainerID属性来改变。

查看ListView的Tiled布局生成的标记时,可以看到Group Container的一个例子。这个布局的LayoutTemplate显示了一个用作Group Container的表,如下所示:

<table id="groupContainer" runat="server" border="0" style=""></table> 

定义了Group Container后,还需要定义Item Container,但不是在LayoutTemplate中定义,而需要在GroupTemplate中定义。再次查看Tiled布局,会发现在其GroupTemplate中,定义了一个用作Item Container的表行。

<tr id="itemContainer" runat="server"></tr>

显示时,ListView先输出其LayoutTemplate,再输出GroupTemplate。之后ItemTemplate输出GroupItemCount属性定义的次数。达到组的项数后,ListView就输出GroupTemplate,再输出ItemTemplate,为它绑定的每个数据项重复这个过程。

使用EmptyItemTemplate

使用GroupTemplate时,还要注意绑定到ListView控件上的数据项数可能不能被GroupItemCount值整除。如果创建了一个ListView布局,它依赖HTML表排列其数据项,就一定要注意这个问题,因为最后一行定义的表单元格数可能少于前面的表行,使控件输出的HTML无效,并可能导致显示问题。要解决这个问题,ListView控件包含EmptyItemTemplate。如果使用GroupTemplate,且没有足够的数据项达到GroupItemCount值,就显示这个模板。图7-34显示了使用EmptyItemTemplate的一个例子。

 
图  7-34

在这个例子中,绑定到ListView控件上的数据源包含4个数据项,但控件的GroupItemCount设置为3,表示在每个组中显示3个ItemTemplate。而在显示的第二个组中只有一个数据项,因此,该控件使用EmptyItemTemplate填充剩余的项。

在ListView的Tiled布局中可以看到使用EmptyItemTemplate的另一个例子。

2. ListView数据绑定和命令

因为ListView不在运行期间生成任何布局标记,也不像GridView那样包含任何自动生成字段的逻辑,所以每个模板都使用标准的ASP.NET内嵌数据绑定语法,来定位每个数据项在已定义布局中的值。

提示:

ASP.NET内嵌数据绑定语法详见本章后面的内容。

查看控件创建的默认Grid布局的ItemTemplate,就可以看到这些值。在这个模板中,绑定数据源的每一列都使用一个ASP.NET标签显示,该标签的文本属性设置为一个数据绑定计算表达式:

<asp:Label ID="ProductNameLabel" runat="server"text='<%# Eval("ProductName") %>' />

因为该控件使用这个灵活的模型显示绑定的数据,所以可以利用这一点把数据放在模板的指定位置上,甚至可以使用ASP.NET的数据绑定功能处理绑定的数据,之后显示它们。

每个显示绑定数据的ListView模板都使用相同的ASP.NET绑定语法,只是为数据提供不同的模板。例如,如果可以在Grid布局中编辑,就会发现EditItemTemplate根据底层的数据类型,用文本框或复选框替代了ItemTemplate使用的ASP.NET标签。

<asp:TextBox ID="ProductNameTextBox" runat="server"Text='<%# Bind("ProductName") %>' />

另外,这个灵活性还允许选择让终端用户如何编辑数据(假定使数据可以编辑)。这里不使用标准的ASP.NET文本框,也可以用下拉列表或第三方编辑控件来替代它。

要让ListView为数据项显示EditItemTemplate,该控件需要使用与GridView控件相同的命令概念。ItemTemplate提供了3个命令,可用于改变数据项的状态。

表  7-9

命  令  名

说    明

Edit

使指定的数据项进入编辑模式,为数据项显示EditTemplate

Delete

从底层数据源中删除指定的数据项

Select

把ListView控件的Selected索引设置为指定数据项的索引

这些命令与ASP.NET按钮控件的CommandName属性一起使用。使用ListView配置对话框激活Editing和Deleting,就可以看到在ListView的默认Grid布局的ItemTemplate中使用的这些命令。这么做会生成一个包含Edit和Delete按钮的新列,这两个按钮把CommandName属性分别设置为Edit和Delete。

<asp:Button ID="DeleteButton" runat="server"CommandName="Delete" Text="Delete" /><asp:Button ID="EditButton" runat="server"CommandName="Edit" Text="Edit" />

ListView的其他模板提供了其他命令,如表7-10所示。

表  7-10

模    板

命  令  名

说    明

EditItemTemplate

Update

更新ListView数据源中的数据,并把数据项返回给ItemTemplate进行显示

EditItemTemplate

Cancel

取消编辑,并把数据项返回给ItemTemplate

InsertItemTemplate

Insert

把数据插入ListView数据源

InsertItemTemplate

Cancel

取消插入,重置InsertTemplate控件绑定值

ListView(2)相关推荐

  1. ListView(3)

    7.4.6  ListView(3) 3. ListView分页和Pager控件 ASP.NET 3.5引入了另一个新控件DataPager,ListView使用它为自己提供分页功能.DataPage ...

  2. ListView(1)

    7.4.6  ListView(1) ASP.NET 3.5引入了一个新的数据绑定列表控件ListView.ListView控件主要用于提供一个数据绑定控件,弥补ASP.NET 2.0中高度结构化的G ...

  3. Flutter ListView (动态)列表组件、水平列表组件、图标组件详解

    Flutter ListView (动态)列表组件.水平列表组件.图标组件 Flutter ListView 基础列表组件.水平列表组件.图标组件 列表常见的几种情况: 垂直列表 垂直图文列表 横向列 ...

  4. 横向ListView(一) ——开篇,基础逻辑实现

    2019独角兽企业重金招聘Python工程师标准>>> 第一次写博文,写得不好的地方还望各位看客见谅 为了学习自定义软件开发,且定制出满足自己需求的控件(不需要将就地使用第三方源码) ...

  5. 横向ListView(四) —— 添加滚动条

    2019独角兽企业重金招聘Python工程师标准>>> 在前面的文章已经介绍了横向ListView的基础实现及头尾视图的添加等的实现,这篇文章将介绍为横向ListView添加滚动条: ...

  6. ListView(一)

    理论部分 1.ListView是最常用的控件之一,其知识点和用法对我来说纷繁复杂 2.最常用的用法就是:ListView配合BaseAdapter使用 3.方法1: public View getCh ...

  7. android之ScrollView里嵌套ListView(转)

    hi,大家好,研究完ScrollView嵌套ScrollView之后,本人突然又想研究ScrollView里嵌套ListView了. 如果还不知道ScrollView嵌套ScrollView是怎么实现 ...

  8. Android之ListView(三)

    文章目录 activity_main.xml chatting_item_msg_text_left.xml chatting_item_msg_text_right.xml ChatActivity ...

  9. [android] 练习使用ListView(一)

    练习使用ListView,BaseAdapter,先展示文字的,再练习图片的 MainActivity.java package com.android.test;import android.app ...

最新文章

  1. 有必要将所有机器学习算法都实现一遍吗?
  2. 鼠标点击实现划掉文字效果
  3. 细颗粒度Singleton模式实现
  4. eclipse下使用maven配置库托管jar包
  5. 软件公司与非软件公司区别(纯个人看法)
  6. 运行pip list报错:Fatal error in launcher: Unable to create process using...python\Scripts\pip.exe list
  7. 南开大学计算机原理在线作业,南开大学20秋《计算机原理》在线作业-1(参考答案)...
  8. MySQL的事务处理
  9. juc包下四大并发工具
  10. es6 filter方法_[ 翻译 ] ES6中数组去重的三种方法
  11. elasticsearch使用场景_Elasticsearch功能、适用场景及特点
  12. 数据挖掘算法之Apriori算法应用实例
  13. one class classification
  14. 全球及中国等离子电视行业市场销售量调研及未来发展展望报告2022-2027年
  15. 通过GitHub静态网页托管,十分钟制作一份精美的在线网页简历
  16. 配置openldap使用SSL连接
  17. 强大的UI组件集Telerik R3 2022支持.NET 7、全新的主题等
  18. FFT(快速傅里叶变换)学习笔记
  19. 必须推荐几个程序员硬核大佬 陪你在线过年
  20. 2013年最损的话,搞笑得经典,快进…

热门文章

  1. freemarker判断是否为空
  2. Nginx站点缓存设置
  3. ArrayDeque 双端队列
  4. cornerstone 库删除 后 重新添加 ,引用找不到,
  5. Centos5.6 x86_64下安装DRBD+Heartbeat+NFS
  6. C#通用类库--DOS常用命令
  7. Vue.js 内部运行机制之总结 常见问题解答
  8. Jeecg-Boot使用war包在Tomcat中部署之参考教程
  9. 如何在Linux/MacOS系统上安装Microsoft SQL Server
  10. 现代计算机模型要求程序在执行,大学计算机基础考试考点.doc