以asp.net 2.0為主的專案,大部份依然是以GridView為主要顯示控制項,
到了asp.net 3.5開始,我們有了更彈性的選擇:ListView Random這邊簡單的來介紹一下 ListView 的基本應用
為什麼說ListView是目前最通用的控制項?
因為以往的Repeater、DataList、GridView等功能,ListView都能夠輕易的達成, 它是前幾個控制項的昇級版,所以,它當然能支援分頁功能 (在asp.net2.0中,我們的Repeater與DataList都是自已透過PagedDataSource實作分頁) 那麼,我們先來一點基本的... 模擬Repeater控制項
假設今天我想讓ListView顯示出來的是像這樣的Tag: <div> <ul> <li>ID:[0] 時間0</li> <li>ID:[1] 時間1</li> ....以下略.... </ul> </div> 那我們就可以這樣寫:
<asp:ListView ID="Main_LV" runat="server" ItemPlaceholderID="PH_Inner">
<LayoutTemplate>
<div style="width:300px;border:gray 1px dotted;margin:2px">
<ul>
<asp:PlaceHolder ID="PH_Inner" runat="server" />
</ul>
</div>
</LayoutTemplate>
<ItemTemplate>
<li>
<%# Eval("Name") %>
<small><%# Eval("DateTimeCreate","{0:yyyy-MM-dd}") %></small>
</li>
</ItemTemplate>
</asp:ListView>
OK, 像這樣是一個基礎的ListView結構,以<asp:ListView>為主的Tag,內嵌LayoutTemplate、ItemTemplate兩層Tag, 我想大家對ItemTemplate都很熟悉,就是定義資料的樣版, 陌生的是LayoutTemplate,簡單的說,它是拿來定義外部結構用的, 比較特殊的是,我們必需在LayoutTemplate中放置一個runat="server"的控制項, 並且告訴ListView,這個位置是拿來顯示內容的位置。 ( 本例使用PlaceHolder控制項,ID為PH_Inner,所以我們可以看到在ListView中, 我們設定了一個名為ItemPlaceHolderID的屬性,就是我們的PH_Inner ) 再來是資料來源,因為資料來源很多種,可以配合伺服器控制項或其他方式, 不過Random為了簡單起見,我們這邊先用假資料代替,那今天的CodeFile則如下:
/// <summary>暫用的Member類別</summary>
public class Member
{
public String Name { get; set; }
public DateTime DateTimeCreate { get; set; }
}
// 假資料用的 List<T> static field.
protected static List<Member> m_Members;
// 這邊使用一個 static property回傳List<T>充當資料來源
protected static List<Member> Members
{
get
{
if( m_Members == null )
{
m_Members = new List<Member>();
for( var i = 0 ; i <= 9 ; i++ )
{
m_Members.Add( new Member
{
Name = "ID:[" + i + "]",
DateTimeCreate = DateTime.Now.AddDays( i )
} );
}
}
return m_Members;
}
}
protected void Page_Load( object sender, EventArgs e )
{
//所以我們在PageLoad時, 就將資料指定給ListView, 並執行DataBind
Main_LV.DataSource = Members;
Main_LV.DataBind();
}
OK, 至此, 我們執行程式就可以看到執行的畫面如下: 正確無誤吧,由以上最簡單的方式,我們先模擬了Repeater的顯示方式。 模擬GridView控制項
接下來,是我們最常用的GridView控制項,ListView當然能簡單達成這個需求。我們都知道GridView最後Render出來是一個Table的HTML結構, 那麼我們只要在ListView中填入相應的Tag即可, 所以我們將HTML的部份改為:
<asp:ListView ID="Main_LV" runat="server" ItemPlaceholderID="PH_Inner">
<LayoutTemplate>
<div style="width:300px;border:gray 1px dotted;margin:2px">
<table border="1" bordercolor="#CCC" style="width:90%;margin:10px">
<tr>
<td>編號</td>
<td>名稱</td>
<td>新增日期</td>
</tr>
<asp:PlaceHolder ID="PH_Inner" runat="server" />
</table>
</div>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Container.DataItemIndex + 1 %></td>
<td><%# Eval("Name") %></td>
<td><small><%# Eval("DateTimeCreate","{0:yyyy-MM-dd}") %></small></td>
</tr>
</ItemTemplate>
</asp:ListView>
OK, 改完我們再次執行頁面,我們就能看到這樣的輸出畫面..這樣就是標準的Table結構囉~ 最後是...模擬DataList控制項
最後一項簡單任務,就是用ListView模擬DataList的顯示, 這時我們要用到ListView的另一個嵌套屬性 "GroupTemplate", 我們先來看Code的部份:
<asp:ListView ID="Main_LV" runat="server"
GroupPlaceholderID="PH_Group" ItemPlaceholderID="PH_Item" GroupItemCount="3">
<LayoutTemplate>
<div style="width:300px;border:gray 1px dotted;margin:2px">
<table border="0" style="width:90%;margin:10px">
<asp:PlaceHolder ID="PH_Group" runat="server" />
</table>
</div>
</LayoutTemplate>
<GroupTemplate>
<tr>
<asp:PlaceHolder ID="PH_Item" runat="server" />
</tr>
</GroupTemplate>
<ItemTemplate>
<td>
<div style="border:#336699 2px solid;margin:5px">
<b><%# Container.DataItemIndex + 1 %></b>
<%# Eval("Name") %>
<small><%# Eval("DateTimeCreate","{0:yyyy-MM-dd}") %></small>
</div>
</td>
</ItemTemplate>
</asp:ListView>
OK, 這邊可以看到我們在ListView的Attributes中加入了一些屬性,分別是GroupPlaceholderID與GroupItemCount, 大家應該有印象,在使用DataList的時候會用到名為RepeatColumns的屬性, 我們可以把GroupItemCount想像成跟它一樣,設定的是一行要顯示幾項資料。 接下來我們加入了GroupTemplate,裡面放置了<tr></tr>的Tag, 中間則放置了PlaceHolder來設定ItemTemplate顯示位置, 你可以看到ListView中的各個Attribute是對應到不同Template中的ID。 觀念上、你可以這麼想: LayoutTemplate - 最外層 (<table>....</table>) GroupTemplate - 資料行 (<tr>...</tr>) ItemTemplate - 資料欄 (<td>...</td>) 所以就會像上面這樣了, 說穿了也只是TR、TD的Tag做變換而已, 最後顯示的畫面如下: 到此,我們已經能用ListView全數取代之前常用的幾個控制項, 在網頁設計的一般排版上使用已經不是問題, 當然,並不是說就完全地不再用其他資料控制項, 一般還是要依當下的使用需求,照狀況去決定, 雖然以一般使用者來說,ListView要手動寫的Tag是比較多, 但也因為如果,它所提供的彈性較大,也能夠應付更多樣化的需求, ListView的一些細節,各位可以參考MSDN, 能多一樣好用的控制項能用,何樂而不為呢 其實還有很多細節可以說明,待Random稍加整理再寫好了...
2010-04-26 18:34:00 By RazgrizHsu
1937 Visits
|
文章分類 Category關於站長 About
大家來噗浪 Plurk武林高手連結 Links免責聲明 Disclaimer
|