[原文]http://getben.com/archive/2007/01/11/introduction-to-chameleon-list-base-controls.aspx

这篇文章属于我的文章系列Chameleon介绍...

Chameleon 列表控件显示多个对象/值(例如一系列用户,或者同一主题里的若干论坛贴子)。和单值控件类似,列表控件也支持同样的基本属性(ControlIdsToHideWhenNotVisible, ContainerId, CssClass, Tag, DisplayConditions, LeaderTemplate, TrailerTemplate, DataSource, and Attributes),但它还定义了额外的模板,用于支持对列表中的每个对象/值进行布局。这些模板包括(以输出顺序):

  1. LeaderTemplate
    LeaderTemplate包含了在控件内容之前,内容包装标签之内输出的标签。LeaderTemplate不支持数据绑定(这点不像单值控件)。
  2. HeaderTemplate
    HeaderTemplate代表要在ItemTemplate, AlternateItemTemplate以及NoneTemplate前面输出的内容。
    这个模板继承自Repeater(所有的Chameleon列表控件的基类).
  3. ItemTemplate
    ItemTemplate代表DataSource里每一项的模板。
    这个模板继承自Repeater(所有的Chameleon列表控件的基类)。
  4. AlternateItemTemplate
    AlternateItemTemplate是可选的模板,用于交替输出DataSource内的项。如果未定义,所有的项都会以ItemTemplate输出。
    这个模板继承自Repeater(所有的Chameleon列表控件的基类)。
  5. NoneTemplate
    当DataSource不包含任何项时会输出NoneTemplate。在这种情况下,可以通过设置ShowHeaderFooterOnNone为 false来隐藏HeaderTemplate和FooterTemplate(ShowHeaderFooterOnNone默认为true)。
  6. SeparatorTemplate
    SeparatorTemplate在输出的DataSource项之间(在ItemTemplate和AlternatingItemTeplate之间)输出。
    这个模板继承自Repeater(所有的Chameleon列表控件的基类)。
  7. RowSeparatorTemplate
    RowSeparatorTemplate在预定义数量的项之后(并且在SeparatorTemplate的后面)输出。ItemsPerRow属性定义了RowSeparatorTemplate之间应该输出多少项。
    在以行和列的形式显示数据——比如相册里的图片时非常有用。
    注意除非ItemsPerRow的值大于零,否则RowSeparatorTemplate不会输出。
  8. AdTemplate
    AdTemplate表示要在DataSource的项之间显示的广告。广告出现的位置由属性AdPlacement(译注:目前 AdPlacementOptions枚举包括:None, PreFooter, PreSecond, PreSecondAndLast, Seperator)定义。
  9. FooterTemplate
    FooterTemplate表示要在ItemTemplate, AlternateItemTemplate以及NoneTemplate后面输出的内容。
    这个模板继承自Repeater(所有的Chameleon列表控件的基类)。
  10. TrailerTemplate
    TrailerTemplate包含了在控件内容之前,内容包装标签之内输出的标签。TrailerTemplate不支持数据绑定(这点不像单值控件)。

与单值控件类似,与Community Server API对象相关的列表控件也根据它们包含的对象(如User, Post,等等)而命名,包括:

  • UserList(<CSControl:UserList />)
  • PostList(<CSControl:PostList />)
  • SectionList(<CSControl:SectionList />)
  • GroupList(<CSControl:GroupList />)
  • 等等...

以及与特定应用相关的列表:

  • WeblogList(<CSBlog:WeblogList />)
  • WebLogPostList(<CSBlog:WebLogPostList />)
  • ForumList(<CSForum:ForumList />)
  • ForumPostList(<CSForum:ForumPostList />)
  • 等等...

当Community Server 2007发布后,我们会有每个控件的文档。大体上说,和单值控件一样,每个Community Server API对象都有一个相应的列表控件。
  
每个API相关列表控件都会根据它的上下文自动获取一系列对象。上下文由以下项定义:

  • URL里的对象引用(例如贴子名称,用户ID,节的Application Key,等等)
  • 父控件(通常由列表控件定义)

例如:

  • 如果页面中没有上下文(在URL中没有指定对象引用),UserList控件默认情况下会列出网站的所有用户。
  • 如果所在的页面指定了节ID或节的Application Key(比如一个博客页面),UserList控件将会列出此节的所有者。
  • 如果UserList控件在SectionList控件的ItemTeplate或AlternateItemTemplate里,它将会列出每个节的所有者。
  • 如果UserData控件在UserList控件的ItemTeplate或AlternateItemTemplate里,它会显示UserList控件中定义的当前用户。

大多数控件同时也支持一个内置属性,用于影响或改写默认的隐式数据源。这个属性的名称是“QueryOverrides”,它的属性很大程度上依赖于控件所列出的对象的类型。例如,UserList的QueryOverrides属性支持:

  1. IncludeHiddenUsers
    如果设为true,列表将包含隐藏用户。
  2. JoinedDate
    当处理JoinedDateComparer时使用的DateTime值。
  3. JoinedDateComparer(LessThan, EqualTo, GreaterThan)
    如果指定了JoinedDate,用户的注册时间必须匹配JoinedDateComparer定义的条件才会包含在列表中。例如,如果JoinedDate是"6/8/2001", JoinedDateCompare是"GreaterThan",那么只有在6/8/2001之后注册的用户才会被列出.
  4. LastPostDate
    当处理LastPostDateComparer时使用的DateTime值。
  5. LastPostDateCompare(LessThan, EqualTo, GreaterThan)
    如果指定了LastPostDate,用户的最后发贴时间必须匹配LastPostDateComparer定义的条件才会包含在列表中。例如,如果 LastPostDate是"6/8/2001",LastPostDateComparer是"LessThan",那么只有最后发贴时间在 6/8/2001之前的用户才会被列出。
  6. SortOrder(Ascending, Descending)
    对用户排序方式(SortBy)的补充说明,顺序还是倒序。
    默认情况下SortOrder的值是"Ascending"。
  7. PageIndex
    要显示的页码。例如,如果PageSize设置为10,PageIndex为0,将会显示第1到10条用户数据(如果PageIndex设为1,将会显示第11到20条)。
    注意如果指定了PagerId,属性PageIndex会被忽略,取代它作用的是分页器的PageIndex值
  8. PageSize
    一页要显示的用户的数量。如果没有指定PagerId,它将是列表中显示的用户的总数量。
  9. Role
    如果指定,只会显示属于指定角色的用户。
  10. SearchEmail
    如果为true,SearchText会用来搜索用户的邮件地址。
  11. SearchUsername
    如果为true,SearchText会用来搜索用户的名字。
  12. SearchText
    如果指定,只有邮件地址或用户名(取决于SearchEmail和SearchUsername的值)匹配的用户才会被列出。
  13. SortBy(JoinedDate, Username, Website, LastActiveDate, Posts, Email, RecentPosts)
    指定用户排序的依据。以顺序还是以倒序排序由SortOrder属性定义。
    默认情况下,用户根据Username排序。
  14. AccountStatus(ApprovalPending, Approved, Banned, Disapproved, All)
    如果指定,只有处于指定账号状态下的用户会被列出。
  15. Usernames
    如果指定,只有这个属性里包含了用户名的用户会被列出。这个属性的值应该是以逗号间隔用户名。
  16. QueryType(Default, Search, ActiveUsers, ActiveModerators, CurrentUserFavorites, AccessingUserFavorites, UsersWatchingAccessingUser)
    QueryType定义了用于获取用户列表的方法。"Default"将会单独以控件的上下文获取用户列表。
    注意当QueryType是"ActiveUsers", "ActiveModerators", "CurrentUserFavorites", "AccessingUserFavorites" 或 "UsersWatchingAccessingUser" 时,很多过滤选项不可用。
  17. PagerID
    分页器(或分页组,PagerGroup)的控件ID。这个控件用来在用户列表的不同页之间导航。
    仅管这只是单个控件的ID,但还是可以通过一个辅助控件(PagerGroup)使用多个分页器给单个列表进行导航。

尽管这只是UserList的QueryOverrides属性的实现,大多数列表也都支持PageIndex,PageSize,以及PagerID。每个列表暴露了与它所包含的数据相关的选项,这些选项可以通过智能提示方便地发现。例如,帖子列表(WeblogPostList, ForumPostList, EntityList, 以及GalleryPostList),通过它们的QueryOverrides内置属性,暴露了与具体应用相关的ThreadQuery实现。总体上来说,API提供的数据加载选项,大多数或者全部可以通过QueryOverrides使用(但是不需要编写C#代码)。

UserList控件的一个简单实例:

<CSControl:UserList runat="server" ShowHeaderFooterOnNone="false">
   <QueryOverrides QueryType="ActiveUsers" SortBy="RecentPosts" SortOrder="Descending" PageSize="10" />
   <HeaderTemplate>
      <ol>
   </HeaderTemplate>

<ItemTemplate>
      <CSControl:UserData Property="DisplayName" runat="server" Tag="LI" LinkTo="PostsSearch" />
   </ItemTemplate>

<NoneTemplate>
      There are no active users!
   </NoneTemplate>

<FooterTemplate>
      </ol>
   </FooterTemplate>
</CSControl:UserList>

将会列出10个最后发帖的在线用户的昵称(链接到对用户帖子的搜索)。如果没有用户在线,将会输出消息“There are no active users!”。

注意<CSControl:UserData />控件在这个例子里显示了列表中的当前用户的数据。UserData控件隐式的从UserList控件获取当前用户。这个例子中,没有必要设置UserList或UserData的DataSource属性。

除了QueryOverrides里的特定选项以外,所有的Chameleon列表控件都以同样的方式运作。在智能提示的帮助下,定义列表以及浏览列表选项非常轻松。

如果你有任何关于Chameleon的问题,请通过我的联系表单或添加评论发送给我。我会在这一系列的最后一篇文章里回答它们。

这个系列的下一篇文章里,我会讨论表单控件。

[翻译]Chameleon介绍(3) : 列表控件相关推荐

  1. labelview标签列表控件的使用介绍

    标签列表控件的使用介绍 支持点击事件监听 step1: D:\workspace\LabelViewDemoTwo\app\src\main\res\values\strings.xml <re ...

  2. GUI怎么能缺少列表, LVGL『List列表控件』介绍

    一. LVGL GUI列表控件的概念 列表是从背景页面和其上的按钮构建的.按钮包含一个可选的类似图标的图像(也可以是一个符号)和一个 Label.当列表足够长时,可以滚动它. 二. LVGL GUI列 ...

  3. android tv 开发布局,Android TV开发总结(七)构建一个TV app中的剧集列表控件

    前言:剧集类控件,在TV app中非常常见,今天将介绍构建一个TV app中的剧集列表控件,此控件上传到我的Github:https://github.com/hejunlin2013/Episode ...

  4. 安卓进阶系列-05列表控件(RecyclerView)的使用

    RecyclerView的使用 前言 在之前的博客中我介绍了ListView如何使用,当然那部分博客由于没有考虑基础的问题,写的跨度太大,后面我会全部重构的. ListView是一个滑动列表控件,随着 ...

  5. SAP UI5 应用开发教程之二十三 - 列表控件的排序 Sort 和分组 Group

    本教程前一步骤,我们已经实现了给列表控件增加的搜索功能. 在搜索框里输入关键字比如 Salad,就能对发票列表进行过滤,仅显示发票模型里 ProductName 字段里包含 Salad 的那些发票行项 ...

  6. android 固定底部 布局_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  7. 重复控件Repeater和数据列表控件DataList

    5.3  重复控件Repeater和数据列表控件DataList 本节介绍ASP.NET中两个数据迭代控件:Repeater和DataList控件.其中,Repeater控件又被称为重复控件:Data ...

  8. android listview添加数据_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  9. Android获取景点的信息,景点介绍(ListView控件应用)

    1. 案例概述 此案例主要是对ListView列表控件的使用.当应用中包含多项数据,每项数据结构相同,只是内容不同时,可通过列表显示.对于列表中的内容,可以是显示字符串的TextView,也可以是结构 ...

最新文章

  1. python数据库-mysql
  2. session already invalidate
  3. Nutch是个不错的选择
  4. 天天象棋 残局闯关 第2关
  5. android 非法字符 \ufeff错误
  6. docker 部署java_使用Java EE 7,WildFly和Docker进行持续部署–(第1部分)
  7. MFC下列表控件的使用
  8. Redis进阶实践之十八 使用管道模式提高Redis查询的速度
  9. @sql 单元测试_简单单词中使用tSQLt进行的常规SQL单元测试
  10. bash脚本:case语句
  11. oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
  12. javascript classList add报错
  13. 中国高校鄙视链指南...
  14. cgi、fast-cgi、php-pfm关系
  15. atitit.软件开发--socket框架选型--netty vs mina j
  16. 安卓打开rpm文件_android 添加文件打开方式,找了很久终于找到了,收藏起来吧...
  17. Python下载及环境的安装
  18. 任务管理器中的PID是什么 怎么查看
  19. 作为一个程序员: 这么奇葩搞笑的代码注释你见过吗?
  20. FFmpeg编码器参数的设置及解释

热门文章

  1. 最小生成树-prim算法模板
  2. [团队项目]后续安排 Github
  3. Delphi中静态方法重载还是覆盖的讨论
  4. QT中个数据类型的转换
  5. jquery实现跨域
  6. 现实世界的Windows Azure:采访Dot Net Solutions的首席执行官Dan Scarfe
  7. Oracle 10G 全新创建数据库过程(暂记)
  8. SetNoneScaleMutableGraph
  9. 浅谈工作流引擎的几个关键因素
  10. 2.13 向量化 Logistic 回归-深度学习-Stanford吴恩达教授