通過敲牛腩視頻我們知道對於顯示資料的部分我們使用了一些專門控制項用於顯示資料,通過這些控制項可以以可視化的方式查看綁定資料之後的效果。這些控制項稱之為資料繫結控制項。
資料繫結控制項的一些常用屬性:
DataSource屬性:指定資料繫結控制項的資料來源,顯示的時候程式將會從這個資料來源中擷取資料並顯示。
DataSourceID屬性:指定資料繫結控制項的資料來源控制項的ID,顯示的時候程式將會根據這個ID找到相應的資料來源控制項,並利用這個資料來源控制項中指定方法擷取資料並顯示。
DataBind()方法:當指定了資料繫結控制項的DataSource屬性或者DataSourceID屬性之後,再調用DataBind()方法才會顯示繫結資料。並且在使用資料來源時,會首先嘗試使用DataSourceID屬性標識的資料來源,如果沒有設定DataSourceID時才會用到DataSource屬性標識的資料來源。也就是說DataSource和DataSourceID兩個屬性不能同時使用。
在牛腩新聞發布系統中常用資料繫結控制項:
GridView控制項
GridView控制項是一種複合型的控制項,它使用表格形式實現多列資料的展示,GridView控制項上使用的特效一般需要用用戶端Javascript指令碼,指令碼方法可以直接寫在.aspx檔案上,也可以在綁定資料時,為控制項增加該屬性。GRIDVIEW產生的是TABLE,效率低,是因為TABLE在瀏覽器裡載入的時候,是整個表一起載入,然後再呈現,從而有個“漫長”的等待時間,而且,使用TABLE導致的HTML代碼也大很多。
代碼:
<!----熱點新聞----> <div id="hotnews" class="commonfrm"> <h4>熱點新聞</h4> <asp:GridView ID="gvHotNews" runat="server" AutoGenerateColumns ="False" BorderWidth ="0" GridLines="None"> <Columns> <asp:TemplateField HeaderText="所屬類別" HeaderStyle-CssClass ="th_category" > <ItemTemplate> <a class="td_category" href ='list.aspx?caid=<%#Eval("caId") %>'>[<%# Eval("name") %>]</a> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="新聞標題"> <ItemTemplate> <a href='newscontent.aspx?newsid=<%#Eval("id") %>' target ="_blank" title ='<%#Eval("title") %>'><%# StringTruncat( Eval("title").ToString(),18,"...") %></a> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="發布時間" HeaderStyle-CssClass="th_time" ItemStyle-CssClass ="td_time"> <ItemTemplate> <asp:Label ID="Label3" runat="server" Text='<%# Bind("createtime") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div>
web端:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { NewsManager nm = new NewsManager(); //綁定最新新聞 gvNewNews.DataSource = nm.SelectNewNews (); gvNewNews.DataBind(); //綁定熱點新聞 gvHotNews.DataSource = nm.SelectHotNews(); gvHotNews.DataBind(); } }
Repeater控制項
Repeater控制項用於顯示重複的項目列表,這些項目被限制在該控制項。重複器控制項是模板化的資料繫結列表,Repeater控制項是“無外觀的”,即:它不具有任何內建布局或樣式,也就不會產生任何資料控製表格來控制資料的顯示。因此,我們必須在控制項的模板中明確聲明所有 HTML布局標記、格式標記和樣式標記。Repeater控制項是個輕量級的資料繫結控制項,一般用它來輸出要求相對簡單的資料
代碼:
<asp:Repeater ID="repCategory" runat="server"> <ItemTemplate> <tr> <td ><%# Eval ("id")%></td> <td class="caname"><%# Eval ("name")%></td> <td > <asp:LinkButton ID="lbtnDelCa" runat="server" CommandArgument='<%# Eval("id")%>' OnClientClick="return confirm('刪除類別會使其下新聞及評論全都刪除,是否真的要刪除?')" onclick="lbtnDelCa_Click">刪除</asp:LinkButton> </td> </tr> </ItemTemplate> </asp:Repeater>
web 端:
protected void Page_Load(object sender, EventArgs e) { //判斷session裡面是否存在管理員 if (Session["admin"] != null && Session["admin"].ToString() == "niunan") { //已登入 if (!Page.IsPostBack ) { //頁面第一次載入時綁定類別列表 DataTable dt=new CategoryManager().SelectAll(); repCategory.DataSource = dt; repCategory.DataBind(); } } else { //未登入 Response.Redirect("login.aspx"); } }
對比:
GRIDVIEW是表格,基本上固定產生表格,而REPEATER是重複,可以產生表格,也可以完全自訂DIV之類的輸出,甚至應用於SELECT對象(GRIDVIEW是不可行的)
Repeater 控制項使用資料來源返回的一組記錄呈現唯讀列表。Repeater 控制項不指定內建布局。您可以使用模板建立 Repeater 控制項的布局。
Gridview,DataList(也是常用資料繫結控制項),Repeater
1. 共同點:
1)都是資料繫結的控制項
2)用Eval輸出都得用到模版才能輸出
3)都能用資料來源拖動的方式綁定,也可以在cs檔案裡用簡潔的代碼綁定
2. 不同點:
1)處理外觀樣式:
GridView:最不好處理
DataList:很好處理
Repeater:最好處理,可以非常完美的跟html處理美觀樣式功能一樣
2)功能和效能:
GridView:功能最強大,提供分頁,編輯,刪除,選擇等等很多功能,使用最方便。但效能最差,佔用系統資源大,他的分頁是把整個表的資料取出來,到gridview上分頁的,因此如果資料量比較大的時候,速度非常非常慢。效率極低。 DataList:功能一般,最大的特別是可以實現顯示幾行幾列,刪除,編輯, 翻頁,排序等功能都得自己手工實現。
Repeater:功能簡單,效率高,容易靈活控制產生的HTML代碼,分頁需要自己實現。
總結:
從靈活性上講肯定是Repeater更靈活,他只是迴圈內容,不用產生.net指定的一系列垃圾代碼,但是同時他也失去了.net提供的部分功能。但是編譯產生的html更為簡單,因此效率 也相對要高