[翻译]Chameleon介绍(3) : 列表控件
生活随笔
收集整理的這篇文章主要介紹了
[翻译]Chameleon介绍(3) : 列表控件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[原文]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),但它還定義了額外的模板,用于支持對列表中的每個對象/值進行布局。這些模板包括(以輸出順序):
LeaderTemplate
LeaderTemplate包含了在控件內容之前,內容包裝標簽之內輸出的標簽。LeaderTemplate不支持數據綁定(這點不像單值控件)。
HeaderTemplate
HeaderTemplate代表要在ItemTemplate, AlternateItemTemplate以及NoneTemplate前面輸出的內容。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類).
ItemTemplate
ItemTemplate代表DataSource里每一項的模板。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
AlternateItemTemplate
AlternateItemTemplate是可選的模板,用于交替輸出DataSource內的項。如果未定義,所有的項都會以ItemTemplate輸出。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
NoneTemplate
當DataSource不包含任何項時會輸出NoneTemplate。在這種情況下,可以通過設置ShowHeaderFooterOnNone為 false來隱藏HeaderTemplate和FooterTemplate(ShowHeaderFooterOnNone默認為true)。
SeparatorTemplate
SeparatorTemplate在輸出的DataSource項之間(在ItemTemplate和AlternatingItemTeplate之間)輸出。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
RowSeparatorTemplate
RowSeparatorTemplate在預定義數量的項之后(并且在SeparatorTemplate的后面)輸出。ItemsPerRow屬性定義了RowSeparatorTemplate之間應該輸出多少項。
在以行和列的形式顯示數據——比如相冊里的圖片時非常有用。
注意除非ItemsPerRow的值大于零,否則RowSeparatorTemplate不會輸出。
AdTemplate
AdTemplate表示要在DataSource的項之間顯示的廣告。廣告出現的位置由屬性AdPlacement(譯注:目前 AdPlacementOptions枚舉包括:None, PreFooter, PreSecond, PreSecondAndLast, Seperator)定義。
FooterTemplate
FooterTemplate表示要在ItemTemplate, AlternateItemTemplate以及NoneTemplate后面輸出的內容。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
TrailerTemplate
TrailerTemplate包含了在控件內容之前,內容包裝標簽之內輸出的標簽。TrailerTemplate不支持數據綁定(這點不像單值控件)。
與單值控件類似,與Community Server API對象相關的列表控件也根據它們包含的對象(如User, Post,等等)而命名,包括:
以及與特定應用相關的列表:
??
每個API相關列表控件都會根據它的上下文自動獲取一系列對象。上下文由以下項定義:
??
IncludeHiddenUsers
如果設為true,列表將包含隱藏用戶。
JoinedDate
當處理JoinedDateComparer時使用的DateTime值。
JoinedDateComparer(LessThan, EqualTo, GreaterThan)
如果指定了JoinedDate,用戶的注冊時間必須匹配JoinedDateComparer定義的條件才會包含在列表中。例如,如果JoinedDate是"6/8/2001", JoinedDateCompare是"GreaterThan",那么只有在6/8/2001之后注冊的用戶才會被列出.
LastPostDate
當處理LastPostDateComparer時使用的DateTime值。
LastPostDateCompare(LessThan, EqualTo, GreaterThan)
如果指定了LastPostDate,用戶的最后發貼時間必須匹配LastPostDateComparer定義的條件才會包含在列表中。例如,如果 LastPostDate是"6/8/2001",LastPostDateComparer是"LessThan",那么只有最后發貼時間在 6/8/2001之前的用戶才會被列出。
SortOrder(Ascending, Descending)
對用戶排序方式(SortBy)的補充說明,順序還是倒序。
默認情況下SortOrder的值是"Ascending"。
PageIndex
要顯示的頁碼。例如,如果PageSize設置為10,PageIndex為0,將會顯示第1到10條用戶數據(如果PageIndex設為1,將會顯示第11到20條)。
注意如果指定了PagerId,屬性PageIndex會被忽略,取代它作用的是分頁器的PageIndex值
PageSize
一頁要顯示的用戶的數量。如果沒有指定PagerId,它將是列表中顯示的用戶的總數量。
Role
如果指定,只會顯示屬于指定角色的用戶。
SearchEmail
如果為true,SearchText會用來搜索用戶的郵件地址。
SearchUsername
如果為true,SearchText會用來搜索用戶的名字。
SearchText
如果指定,只有郵件地址或用戶名(取決于SearchEmail和SearchUsername的值)匹配的用戶才會被列出。
SortBy(JoinedDate, Username, Website, LastActiveDate, Posts, Email, RecentPosts)
指定用戶排序的依據。以順序還是以倒序排序由SortOrder屬性定義。
默認情況下,用戶根據Username排序。
AccountStatus(ApprovalPending, Approved, Banned, Disapproved, All)
如果指定,只有處于指定賬號狀態下的用戶會被列出。
Usernames
如果指定,只有這個屬性里包含了用戶名的用戶會被列出。這個屬性的值應該是以逗號間隔用戶名。
QueryType(Default, Search, ActiveUsers, ActiveModerators, CurrentUserFavorites, AccessingUserFavorites, UsersWatchingAccessingUser)
QueryType定義了用于獲取用戶列表的方法。"Default"將會單獨以控件的上下文獲取用戶列表。
注意當QueryType是"ActiveUsers", "ActiveModerators", "CurrentUserFavorites", "AccessingUserFavorites" 或 "UsersWatchingAccessingUser" 時,很多過濾選項不可用。
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的問題,請通過我的聯系表單或添加評論發送給我。我會在這一系列的最后一篇文章里回答它們。
這個系列的下一篇文章里,我會討論表單控件。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
這篇文章屬于我的文章系列Chameleon介紹...
Chameleon 列表控件顯示多個對象/值(例如一系列用戶,或者同一主題里的若干論壇貼子)。和單值控件類似,列表控件也支持同樣的基本屬性(ControlIdsToHideWhenNotVisible, ContainerId, CssClass, Tag, DisplayConditions, LeaderTemplate, TrailerTemplate, DataSource, and Attributes),但它還定義了額外的模板,用于支持對列表中的每個對象/值進行布局。這些模板包括(以輸出順序):
LeaderTemplate包含了在控件內容之前,內容包裝標簽之內輸出的標簽。LeaderTemplate不支持數據綁定(這點不像單值控件)。
HeaderTemplate代表要在ItemTemplate, AlternateItemTemplate以及NoneTemplate前面輸出的內容。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類).
ItemTemplate代表DataSource里每一項的模板。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
AlternateItemTemplate是可選的模板,用于交替輸出DataSource內的項。如果未定義,所有的項都會以ItemTemplate輸出。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
當DataSource不包含任何項時會輸出NoneTemplate。在這種情況下,可以通過設置ShowHeaderFooterOnNone為 false來隱藏HeaderTemplate和FooterTemplate(ShowHeaderFooterOnNone默認為true)。
SeparatorTemplate在輸出的DataSource項之間(在ItemTemplate和AlternatingItemTeplate之間)輸出。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
RowSeparatorTemplate在預定義數量的項之后(并且在SeparatorTemplate的后面)輸出。ItemsPerRow屬性定義了RowSeparatorTemplate之間應該輸出多少項。
在以行和列的形式顯示數據——比如相冊里的圖片時非常有用。
注意除非ItemsPerRow的值大于零,否則RowSeparatorTemplate不會輸出。
AdTemplate表示要在DataSource的項之間顯示的廣告。廣告出現的位置由屬性AdPlacement(譯注:目前 AdPlacementOptions枚舉包括:None, PreFooter, PreSecond, PreSecondAndLast, Seperator)定義。
FooterTemplate表示要在ItemTemplate, AlternateItemTemplate以及NoneTemplate后面輸出的內容。
這個模板繼承自Repeater(所有的Chameleon列表控件的基類)。
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 />)
- 等等...
??
每個API相關列表控件都會根據它的上下文自動獲取一系列對象。上下文由以下項定義:
- URL里的對象引用(例如貼子名稱,用戶ID,節的Application Key,等等)
- 父控件(通常由列表控件定義)
- 如果頁面中沒有上下文(在URL中沒有指定對象引用),UserList控件默認情況下會列出網站的所有用戶。
- 如果所在的頁面指定了節ID或節的Application Key(比如一個博客頁面),UserList控件將會列出此節的所有者。
- 如果UserList控件在SectionList控件的ItemTeplate或AlternateItemTemplate里,它將會列出每個節的所有者。
- 如果UserData控件在UserList控件的ItemTeplate或AlternateItemTemplate里,它會顯示UserList控件中定義的當前用戶。
??
如果設為true,列表將包含隱藏用戶。
當處理JoinedDateComparer時使用的DateTime值。
如果指定了JoinedDate,用戶的注冊時間必須匹配JoinedDateComparer定義的條件才會包含在列表中。例如,如果JoinedDate是"6/8/2001", JoinedDateCompare是"GreaterThan",那么只有在6/8/2001之后注冊的用戶才會被列出.
當處理LastPostDateComparer時使用的DateTime值。
如果指定了LastPostDate,用戶的最后發貼時間必須匹配LastPostDateComparer定義的條件才會包含在列表中。例如,如果 LastPostDate是"6/8/2001",LastPostDateComparer是"LessThan",那么只有最后發貼時間在 6/8/2001之前的用戶才會被列出。
對用戶排序方式(SortBy)的補充說明,順序還是倒序。
默認情況下SortOrder的值是"Ascending"。
要顯示的頁碼。例如,如果PageSize設置為10,PageIndex為0,將會顯示第1到10條用戶數據(如果PageIndex設為1,將會顯示第11到20條)。
注意如果指定了PagerId,屬性PageIndex會被忽略,取代它作用的是分頁器的PageIndex值
一頁要顯示的用戶的數量。如果沒有指定PagerId,它將是列表中顯示的用戶的總數量。
如果指定,只會顯示屬于指定角色的用戶。
如果為true,SearchText會用來搜索用戶的郵件地址。
如果為true,SearchText會用來搜索用戶的名字。
如果指定,只有郵件地址或用戶名(取決于SearchEmail和SearchUsername的值)匹配的用戶才會被列出。
指定用戶排序的依據。以順序還是以倒序排序由SortOrder屬性定義。
默認情況下,用戶根據Username排序。
如果指定,只有處于指定賬號狀態下的用戶會被列出。
如果指定,只有這個屬性里包含了用戶名的用戶會被列出。這個屬性的值應該是以逗號間隔用戶名。
QueryType定義了用于獲取用戶列表的方法。"Default"將會單獨以控件的上下文獲取用戶列表。
注意當QueryType是"ActiveUsers", "ActiveModerators", "CurrentUserFavorites", "AccessingUserFavorites" 或 "UsersWatchingAccessingUser" 時,很多過濾選項不可用。
分頁器(或分頁組,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的問題,請通過我的聯系表單或添加評論發送給我。我會在這一系列的最后一篇文章里回答它們。
這個系列的下一篇文章里,我會討論表單控件。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的[翻译]Chameleon介绍(3) : 列表控件的全部內容,希望文章能夠幫你解決所遇到的問題。