2004-5-22+ 使用DataList吧
这是个具有明显煽动性的标题,没错,在这里就是提议大家使用DataList。
在MSDN中文站有一篇关于repeater,datalist和datagrid的性能测试的文章,我也把这篇文章转到了我的站的“转载嘿嘿 希望你接受我的教训 一定早做打算 精华”里,这是篇不错的文章,里面有对这三个控件的详细的分析。其中从性能比较可以很清楚的看到repeater和datalist在效率上基本没有区别,而datalist和repeater相比还有很多优秀的性能。当然在进行简单处理的时候还是repeater好用一些,但如果要做“留言本”级的系统的时候,用datalist就有很明显的优势!
图:性能比较
不过还是要详细的说说这个DataList,我们使用它主要是因为它有四个命令select/edit/update/cancel,以及与之相应的两个模板selecteditemtemplate/edititemtemplate.根据我的观察,好象每次点击按钮执行操作的时候,都会引发OnItemCommand所指定的事件,所以大家在使用OnItemCommand时一定要注意。但是我们也可以利用这个特性来使用DataList所缺少的delete命令,办法就是在需要的行添加一个<asp:LinkButton ID="link_delete" Commandname="delete" Text="delete" runat="server"></asp:LinkButton>,因为每次点击按钮都要先执行OnItemCommand所指定的DataList_OnSelectedCommand事件,我们就可以在这里面加上对delete事件的定义:
//选择时的事件
private void dl1_selected(object sender,DataListCommandEventArgs e){
//删除记录
if(e.CommandName=="delete"){
// do something about delete
}
//结束删除记录
else{
dl1.SelectedIndex=e.Item.ItemIndex;
set();
lb2.Text="select";
}
}
这样就完成了一次删除过程。同样的,如果需要定义其他别的什么功能有,也可以放到这里面来。
最后再说一下DataList的工作方式,对DataList还不是很熟悉的朋友可以接着往下读。
这是一个datalist控件的简单引用,用来指定事件的处理程序。
<asp:DataList ID="dl1" runat="server" OnItemCommand="dl1_selected" OnEditCommand="dl1_edit" OnCancelCommand="dl1_cancel" OnUpdateCommand="dl1_update">
DataList的selecteditemtemplate/edititemtemplate模板并不是一开始就显示在网页上,而是当用户单击了CommandName为select/edit的按钮后才会对应的出现,而像我们上面所说的,当没有指定任何select或edit的commandname时,selecteditemtemplate就会出来,而当你把commandname设为edit/update/cancel时,这个selecteditemtemplate就不会出现。
//点击编辑按扭的事件
private void dl1_edit(object sender,DataListCommandEventArgs e){
dl1.EditItemIndex=e.Item.ItemIndex;
set();
}
//点击取消按扭的事件
private void dl1_cancel(object sender,DataListCommandEventArgs e){
dl1.EditItemIndex=-1;
set();
}
//点击更新按扭的事件
private void dl1_update(object sender,DataListCommandEventArgs e){
//do something about update
}
按照上面的代码,点edit的时候edititemtemplate就会出现,而点cancel的时候就会恢复成select的样子(注意不是什么都没有点的样子),点update自然就会转到执行相关的update操作。说是datalist的一些命令,其实还是得我们自己来指定。