ListView是.NetFramework3.5以後VS2008新增加的一個控制項,當然我們現在都用VS2010了,當然也就有了,我的VS2010安裝的是試用版的,120天以後就到期了,到期以後想著安裝正式版的,可是報了一系列的安裝錯誤,先用著VS2008吧。VS2010試用版的到期後讓我給卸載了。一聽ListView控制項是最新加上去的,那麼它肯定是個集大成者,有著以前哪幾種控制項的種種優點。沒錯,在repeater、DataList、GridView控制項中所擁有的優點,在ListView控制項中都包含了。確實是一個集大成的控制項。DataList是外層給我們套了一個Table,repeater沒有,那麼ListView是整合優點來著,外層有Table好啊還是沒有好啊,反正我是不太喜歡外層套上一個Table,然後我必須在每一個TD標記裡面在嵌套一個Table標記,多麻煩啊。所以說repeater靈活,ListView就繼承過來這個優點了,它的外層代碼全是我們手寫,不像DataList一樣外層預設給我們套一個Table表格,ListView像repeater一樣:沒有外層的Table表格了。回顧一下,我們的repeater控制項用起來簡潔,但是要自己寫挺多代碼。DataList自己提供了很多的模板給我們,自然方便得多,不過沒有repeater那麼簡潔。GridView也是提供了很多的模板給我們,它比DataList更方便,甚至有些操作不用寫一行後他代碼就可以實現。它們三者(repeater、DataList、GridView控制項)是互相補充的,不存在誰去替代誰的概念。repeater比DataList和GridView更加靈活簡潔,而DataList和GridView提供給我們現成的功能更加全面,使用起來更加方便。它們誰也替代不了誰。功能上repeater、DataList、GridView能夠做到的,ListView也能夠做到。我想這也許就是這個控制項推出的目的吧。但是ListView也存在它的弊端,它不存在可視化的介面,也就是說它只能讓我們看著HTML代碼去寫我們要實現的功能,要去建立的模板。不像DataList和GridView那樣有很多的模板,很多的可視化編程操作介面。它沒有,這點它非常類似於repeater。---------------------------------------------------------------------下面就來說說ListView控制項的模板:它的模板主要用到的有,注意是主要用到的: <LayoutTemplate> </LayoutTemplate> <GroupTemplate> </GroupTemplate> <ItemTemplate> </ItemTemplate> <EditItemTemplate> </EditItemTemplate> ---------------------------------------------------------------------下面我用這些模板來實現兩個效果:第一個效果的顯示結果: 它的後台代碼我和大家來分析分析:首先是LayoutTemplate模板中的代碼,這可以說使我們最常用到的一個模板: 我們顯示資料的表格就放在這裡面,然後顯示的那塊以前稱作頭模板的字碼頁寫在這裡面。繼續分析: 我標出來的一個重要的屬性:itemPlaceholder,它會自動的去找ItemTemplate模板中的內容。那這就好辦了,我們的ItemTemplate模板可以做了。注意:我們必須設itemPlaceholder這個屬性,不設定或寫錯了,那就完蛋了,除非說把這個屬性的名稱給改成自己想要的:在哪裡改?在ListView屬性中的:去改,改成自己想要的,然後填寫自己改的那個名稱就可以了。ListVIew的ItemTemPlate的做法和repeater做ItemTemPlate一樣: 不多說了,關鍵是上面注意的內容。再就是在這裡綁定資料的時候,只能用Eval去綁定(單向綁定),而不能用Bind雙向繫結。因為我們在這裡用到的是TD標記,而不是一個控制項。Bind雙向繫結的前提是必須在對一個控制項的資料繫結,或放在帶有runat=server這句話的HTML標記中才可以。而Eval就沒那麼彆扭了,它的靈活性更寬,可以放在控制項中,也可以放在任意的HTML標記中。不過Eval支援的是單向綁定,所謂的單向綁定就是只能從資料庫中把資料繫結顯示出來,而不能把修改完的資料送到資料庫中去。而Bind雖然要求的比較多,但是支援雙向繫結,既能夠把資料從資料庫中顯示出來,也能夠把資料送回到資料庫中去。---------------------------------------------------------------------現在再來說說ListView的另一個模板:GroupTemPlate分組模板我們知道LayoutTemPlate模板放一個Table表格它可以直接包含ItemTemPlate也可以通過包含一個GroupTemPlate 再來通過GroupTemPlate包含ItemTemPlate GroupTemPlate模板的一個重要的屬性:GroupItemCount 設定我這一個模板的一行顯示幾個ItemTemPlate下面我們來看一個效果: 這就是用GroupTemPlate實現的效果:來分析一下代碼:
<LayoutTemplate> <table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="navy" color=white> <asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder> </table> </LayoutTemplate> <GroupTemplate> <tr> <asp:PlaceHolder
ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</tr> </GroupTemplate> <ItemTemplate> <td align="center"> <img src='<%# eval_r("Pic") %>' height="50px" width="50px" /> </td> <td align="center"><%# eval_r("Name") %></td> <td align="center"><%# eval_r("Price") %></td> <td align="center"><%# eval_r("Brand") %></td> <td align="center"><%# eval_r("Oil") %></td> <td align="center"><%# eval_r("Powers") %></td> <td align="center"><%# eval_r("Exhaust") %></td>
</ItemTemplate>
後台沒什麼代碼,所以說ListView繼承了repeater、DataList、GridView的所有的優點。
---------------------------------------------------------------------用ListView實現分頁的效果:用到的控制項DataPager必須設定兩個屬性:PageContentID 對誰分頁 PageSize 每頁顯示幾行資料 對DataPager控制面板的顯示進行控制:點擊DataPager右上方的小三角形,然後點擊:編輯頁導航欄位 效果如下: 這種分頁的缺陷還是把資料從資料庫中放入到List泛型集合中,然後放到
記憶體中進行分頁。缺陷和用GridView配合SqlDataSource實現分頁缺陷一樣。比較可行的分頁是用配合ObjectDataSource實現分頁或使用預存程序實現分頁,或使用LinQ實現分頁。這個思想和repeater、GridView、DataList實現分頁一樣。---------------------------------------------------------------------