现在的位置: 首页 > 综合 > 正文

[转]datagrid repeater datalist三者的比较

2013年04月14日 ⁄ 综合 ⁄ 共 3458字 ⁄ 字号 评论关闭
datagrid repeater datalist三者的比较
2007年06月18日 星期一 上午 10:57

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。

抱歉!评论已关闭.