ListView(2)
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)相关推荐
- ListView(3)
7.4.6 ListView(3) 3. ListView分页和Pager控件 ASP.NET 3.5引入了另一个新控件DataPager,ListView使用它为自己提供分页功能.DataPage ...
- ListView(1)
7.4.6 ListView(1) ASP.NET 3.5引入了一个新的数据绑定列表控件ListView.ListView控件主要用于提供一个数据绑定控件,弥补ASP.NET 2.0中高度结构化的G ...
- Flutter ListView (动态)列表组件、水平列表组件、图标组件详解
Flutter ListView (动态)列表组件.水平列表组件.图标组件 Flutter ListView 基础列表组件.水平列表组件.图标组件 列表常见的几种情况: 垂直列表 垂直图文列表 横向列 ...
- 横向ListView(一) ——开篇,基础逻辑实现
2019独角兽企业重金招聘Python工程师标准>>> 第一次写博文,写得不好的地方还望各位看客见谅 为了学习自定义软件开发,且定制出满足自己需求的控件(不需要将就地使用第三方源码) ...
- 横向ListView(四) —— 添加滚动条
2019独角兽企业重金招聘Python工程师标准>>> 在前面的文章已经介绍了横向ListView的基础实现及头尾视图的添加等的实现,这篇文章将介绍为横向ListView添加滚动条: ...
- ListView(一)
理论部分 1.ListView是最常用的控件之一,其知识点和用法对我来说纷繁复杂 2.最常用的用法就是:ListView配合BaseAdapter使用 3.方法1: public View getCh ...
- android之ScrollView里嵌套ListView(转)
hi,大家好,研究完ScrollView嵌套ScrollView之后,本人突然又想研究ScrollView里嵌套ListView了. 如果还不知道ScrollView嵌套ScrollView是怎么实现 ...
- Android之ListView(三)
文章目录 activity_main.xml chatting_item_msg_text_left.xml chatting_item_msg_text_right.xml ChatActivity ...
- [android] 练习使用ListView(一)
练习使用ListView,BaseAdapter,先展示文字的,再练习图片的 MainActivity.java package com.android.test;import android.app ...
最新文章
- 有必要将所有机器学习算法都实现一遍吗?
- 鼠标点击实现划掉文字效果
- 细颗粒度Singleton模式实现
- eclipse下使用maven配置库托管jar包
- 软件公司与非软件公司区别(纯个人看法)
- 运行pip list报错:Fatal error in launcher: Unable to create process using...python\Scripts\pip.exe list
- 南开大学计算机原理在线作业,南开大学20秋《计算机原理》在线作业-1(参考答案)...
- MySQL的事务处理
- juc包下四大并发工具
- es6 filter方法_[ 翻译 ] ES6中数组去重的三种方法
- elasticsearch使用场景_Elasticsearch功能、适用场景及特点
- 数据挖掘算法之Apriori算法应用实例
- one class classification
- 全球及中国等离子电视行业市场销售量调研及未来发展展望报告2022-2027年
- 通过GitHub静态网页托管,十分钟制作一份精美的在线网页简历
- 配置openldap使用SSL连接
- 强大的UI组件集Telerik R3 2022支持.NET 7、全新的主题等
- FFT(快速傅里叶变换)学习笔记
- 必须推荐几个程序员硬核大佬 陪你在线过年
- 2013年最损的话,搞笑得经典,快进…
热门文章
- freemarker判断是否为空
- Nginx站点缓存设置
- ArrayDeque 双端队列
- cornerstone 库删除 后 重新添加 ,引用找不到,
- Centos5.6 x86_64下安装DRBD+Heartbeat+NFS
- C#通用类库--DOS常用命令
- Vue.js 内部运行机制之总结 常见问题解答
- Jeecg-Boot使用war包在Tomcat中部署之参考教程
- 如何在Linux/MacOS系统上安装Microsoft SQL Server
- 现代计算机模型要求程序在执行,大学计算机基础考试考点.doc