datagrid repeater datalist三者的比較

datagrid repeater datalist三者的比較

1.DataBind()方法遍歷一個特定的DataSource中的記錄,並對其中的每條記錄,建立一個條目並對應數據控件的Item集。數據控件中的每個條目將成爲一個類的實例。這個類因數據控件的不同而有所區別。例如,DataGrid中的每個條目是DataGridItem類的一個實例,而Repeater中的條目則是RepeaterItem類的一個實例。

2.之所以使用不同的類來實例化不同數據控件的條目,是因爲不同的數據控件將會使用不同的方式顯示數據及相應的HTML代碼。例如,DataGridItem類繼承自TableRow類,也就是說,每個DataGridItem的實例或多或少地可以看成一個表格中的一行。這是因爲DataGrid被設計成可以藉助HTML中的<table>標籤以表格的形式顯示數據,因此每條記錄就是一個表格行。而Repeater則被設計成可以自由定義數據輸出的方式。所以,RepeaterItem並不繼承自TableRow就不奇怪了。

3.另一個三種數據控件的相同點是每種控件都被允許使用模板來顯示數據。DataList和Repeater控件必須使用模板來輸出數據,而DataGrid則允許通過TemplateColumn而只使用模板來顯示一列(在DataGrod單元中詳細論述)。

4.另一個不是十分值得比較的地方是:DataGrid和DataList都是繼承自WebControl類,而Repeater則是繼承自Control類。WebControl類包含一些用於美化的屬性,如:BackColor、ForeColor、CssClass、BorderStyle等等。這說明在使用DataGrid或DataList時,你可以設定這些屬性來個性化輸出。Repeater控件則不具有這些屬性。我們會在Repeater單元討論如何使用模板來美化Repeater的輸出。

4.datagrid可以分頁,排序,編輯
    datalist有無分頁,無排序,有編輯模板
    repeater啥都沒有。

5.Asp.net DataList編輯模板的使用
DataList 提供相關的編輯模板,但和DataGrid不一樣的是,DataList沒有編輯按鈕。
要在DataList中使用編輯功能。
可在項模板中增加一個按鈕,Linkbutton和Button都可以。
在CommandName中設置爲Edit就可以把此按鈕和DataList的編輯事件聯繫起來了。
如:
CommandName="Edit"
更新按鈕可以使用CommandName="Update"
取消按鈕可以使用CommandName="Cancel"
刪除按鈕可以使用CommandName="Delete"
來實現。

6.Asp.net 添加客戶端腳本
在Page_Load()事件中
輸入Script代碼字符串,如:string myscript=“<script> alert('hello world');</script>“;
判斷是否有客戶端腳本,如果沒有則添加
if(!Page.IsClientScriptBlockRegistered("clientScript"))
      this.RegisterClientScriptBlock("clientScript",script);

在頁面載入事件中添加
this.deleteButton.Attributes.Add("onClick", "yourclientfunction();");

7.editItemTemplate模板定義了處於編輯狀態時要顯示的項的內容,另外還其中添加了"更新"和“取消"按鈕。

8.在datagrid中對於用EditCommandColumn來編輯數據,要求點擊編輯,更新,取消按鈕時,能彈出不同的提示:
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
   
   
      if(e.Item.ItemType==ListItemType.Item)
      {     
       if(e.Item.ItemIndex!=-1)
        ((LinkButton)e.Item.Cells[4].Controls[0]).Attributes.Add("onclick","return confirm('你確認編輯嗎?');");
      }
      else if(e.Item.ItemType==ListItemType.EditItem)
      {
       if(e.Item.ItemIndex!=-1)
       {
        ((LinkButton)e.Item.Cells[4].Controls[0]).Attributes.Add("onclick","return confirm('你確認更新嗎?');");
        ((LinkButton)e.Item.Cells[4].Controls[2]).Attributes.Add("onclick","return confirm('你確認取消嗎?');");
      
       }
      }
   
   
    }
怪異的是,Controls[2],怎麼會是2呢,查看html碼,編輯列有三個控件,按順序的話,更新和取消也應該是1,2,但是更新卻是0,取消反 而是2,太不可思義了。

 

 

DataGridItem類繼承自TableRow類,也就是說,每個DataGridItem的實例或多或少地可以看成一個表格中的一行。這是因爲DataGrid被設計成可以藉助HTML中的<table>標籤以表格的形式顯示數據,因此每條記錄就是一個表格行。而Repeater則被設計成可以自由定義數據輸出的方式。所以,RepeaterItem並不繼承自TableRow就不奇怪了。

DataList和Repeater控件必須使用模板來輸出數據,而DataGrid則允許通過TemplateColumn而只使用模板來顯示一列

DataGrid和DataList都是繼承自WebControl類,而Repeater則是繼承自Control類。WebControl類包含一些用於美化的屬性,如:BackColor、ForeColor、CssClass、BorderStyle等等。這說明在使用DataGrid或DataList時,你可以設定這些屬性來個性化輸出。Repeater控件則不具有這些屬性。
 DataGrid的第二個缺陷是它的性能。在三種數據控件中,DataGrid是相對性能最差的。由DataGrid所生成的ViewState將會相當龐大,特別是在DataGrid含有較多的行時。當然,你也可以關閉ViewState功能,但代價是你將不能使用排序、分頁以及記錄編輯等功能。
默認情況下DataList會將記錄顯示在HTML表格中。然而,通過設定RepeatColumn屬性,你可以設置在一行中顯示多少條記錄。更進一步,你甚至可以指定DatList的內容不顯示在表格中,而是<span>標籤中。這可以通過設定RepearLayout屬性來實現。

Repeater沒有樣式方面的屬性可供設定。

  DataGrid提供了最多的功能,如允許訪問者對記錄編輯、排序或分頁。同時它也是最容易使用的,甚至於簡單到只需要將之添加到頁面中而不必額外編寫代碼。不過這些易用性是以性能的損失爲代價的。DataGrid在三種控件中是效率最低的,特別是在使用Web Form的情況下。

  通過使用模板,DataList提供了比DataGrid更加優秀的界面效果。不過這需要以犧牲一定的開發時間爲代價。爲了添加排序、分頁和編輯功能,程序員不得不花費比使用DataGrid更多的精力來進行編碼,雖然它的性能要優於DataGrid。

  最後,Repeater允許對數據記錄作最大限度的HTML定製。通常,使用Repeater來顯示數據記錄比使用DataGrid和DataList要耗費更長的開發時間。另外,它不支持內建的編輯、排序和分頁功能。所幸的是,Repeater在性能上要優於其它兩種控件,特別是明顯優於DataGrid。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章