DataList控件详细用法(一)

article/2025/8/16 11:18:34

使用DataList控件  
本章内容:

         1、理解事件冒泡

         2、使用模板

         3、在DataList中显示数据

         4、在DataList中创建多列

         5、捕获DataList控件中产生的事件

         6、选择DataList中的项

         7、使用DataList控件中的DataKeys集合

         8、编辑DataList中的项 

本章介绍在ASP.NET框架中功能最强大的两个控件(DataList控件和DataGrid控件)之一的DataList控件。我们将深入探讨DataList控件,学习如何使用该控件显示数据以及编辑数据库数据。

  一、理解事件冒泡  

在ASP.NET框架包含三个支持事件冒泡的标准控件:Repeater、DataList和DataGrid控件。这些控件可以让你捕获其子控件的时间。当子控件产生一个事件时,事件就“冒泡”传给包含该子控件的容器控件,并且容器控件就可以执行一个子程序来处理该事件。

二、使用模板

       在前一章中我们已经介绍过Repeater控件的五个模板(ItemTemplate、AlternationgItemTemplate、SeparatorTemplate、HeaderTemplate、FooterTemplate),可以格式化控件的输出。在DataList控件中除了支持Repeater控件中的五个模板以外,还支持如下两个模板:

1、SelectedItemTemplate:控制如何格式化被选定的项

2、EditItemTemplate:控制如何格式化被编辑的项。

当选定DataList中选中一个项时(即DataList的SelectedIndex属性值为当前选定项的索引值),将显示SelectedItem模板,当在DataList中选择一个项来编辑(即DataList的EditItemIndex属性值为当前选定项的索引值)时,将显示EditItem模板。

 三、在DataList中显示数据:       

       可以像Repeater控件那样来用DataList显示数据库表中的记录。但是,与Repeater控件不同的是:DataList控件的默认行为是在HTML表格中显示数据库记录。

       如下程序清单演示如何显示pubs数据库中authors表中的数据。

<% @ Page Language = " C# " %>

<% @ Import Namespace = " System.Data.SqlClient "   %>  

< script runat = server >  

void  Page_Load(Object sender , EventArgs e)

{
      SqlConnection conn;
       SqlCommand cmd;
       SqlDataReader dr;
       conn 
= new SqlConnection( "Server=localhost; Database=Pubs;uid=cdd;psw=123" );
       cmd 
= new SqlCommand( "Select au_fname From authors", conn );
       conn.Open();
       dr 
= cmdSelect.ExecuteReader();
       DataList1.DataSource 
= dr;
       DataList1.DataBind();
       dr.Close();
       conn.Close();
}
 
</ Script >  
< html >
< head >< title > DataList.aspx </ title ></ head >
< body >
< form Runat = " Server " >

< asp:DataList
 ID
= " DataList1 "
  Runat
= " Server " >
< ItemTemplate >
  
<% #DataBinder.Eval(Container.DataItem,  " au_fname "  ) %>
</ ItemTemplate >   
</ asp:DataList >
  
</ form >
</ body >
</ html >

    在DataList中显示记录时,authors表中每行都显示在独立的HTML表格中,只要你愿意,也可以修改其RepeatLayout属性把DataList的项显示在HTML的<div></div>中。在默认情况下,RepeatLayout属性值为Table。如果把RepeatLayout属性设为Flow,那么每个项就显示在<div></div>中。

       <asp:DataList RepeatLayout=”Flow” Runat=”Server”>
       当RepeatLayout属性为Table时,通过设置GridLines属性可以在每个单元格周围显示线条。GridLines属性可选值有: Both / Horizontal / Vertical

四、在DataList中创建多列  
       DataList的一个好处的特征是可以以多个列显示数据现。通过设置其RepeatColumns和RepeatDirection属性,可以控制DataList的列的布局。
       RepeatColumns属性决定要显示的列的数量。比如,如果要在DataList中显示四列的项,那么可以把这个属性设为4。
       RepeatDirection属性句顶列是按水平或垂直方向来重复。在默认情况下,RepeatDirection值为Vertical,因此,如果RepeatColumns值为4,则列就像这样显示:
  Column 1    Column3    Column5    Column7

Column 2    Column4    Column6    Column8
 

如果把RepeatDirection设为Horizontal,而且RepeatColumns值为4,那么列就像这样显示:
Column 1    Column3    Column5    Column7
Column 2    Column4    Column6    Column8

注意,即使RepeatDirection值为Vertical,还是显示为4个列。RepeatColumns永远是指重复的列的数量,而不是行的数量。


五、捕获DataList控件中产生的事件  

正如第一小节中提到的那样,DataList控件支持事件冒泡,可以捕获DataList内包含的控件产生的事件,并且通过普通的子程序处理这些事件。讲到这里有些人可能不太明白事件冒泡的好处所在,这样,我们反过来思考:如果没有事件冒泡,那么对于DataList内包含的每一个控件产生的事件都需要定义一个相应的处理函数,如果DataList中包含10000个控件呢?或者更多呢?那我们得写多少个事件处理程序。所以有了事件冒泡,不管DataList中包含多少个控件,我们只需要一个处理程序就可以了。DataList控件支持五个事件: 

1)        EditCommand:由带有CommandName=”edit”的子控件产生

2)        CancelCommand:由带有CommandName=”cancel”的子控件产生

3)        UpdateCommand:由带有CommandName=”update”的子控件产生

4)        DeleteCommand:由带有CommandName=”delete”的子控件产生

5)        ItemCommand:DataList的默认事件

有了这五个事件,那么当我点击了DataList控件中的某一个按钮的时候,应该触发哪一个事件呢?什么时候才触发它们呢?在ASP.NET中有三个控件带有CommandName属性,分别是Button、LinkButton和ImageButton,可以设置它们的CommandName属性来表示容器控件内产生的时间类型。比如,如果设置DataList中的一个LinkButton的CommandName属性为“update”,那么点击此按钮的时候,将会触发DataList的CancelCommand事件,我们可以将相关处理代码写到对应的事件处理程序中去。

如下程序清单演示了点击DataList中三个CommandName分别为edit、delete、update的LinkButton按钮。当点击不同的按钮时,在DataList中产生不同的事件,执行不同的程序:

 

<% @ Page Language = " C# "   %>

<% @ Import Namespace = " System.Data.SqlClient "   %>

< script runat = server >

void  Page_Load(Object sender , EventArgs e)

{

       
if (! IsPostBack ) {

              SqlConnection conn;

              SqlCommand cmd;

              SqlDataReader dr;

       conn 
= new SqlConnection( "Server=localhost; Database=Pubs;uid=cdd;psw=123" );

              cmd 
= new SqlCommand( "Select au_fname  From authors", conn );

              conn.Open();

              dr 
= cmd.ExecuteReader();

              dlstTitles.DataSource 
= dr;

              dlstTitles.DataBind();

              dr.Close();

              conn.Close();

       }


}


void  DataList1_ItemCommand(  object  s, DataListCommandEventArgs e )  {

       lblMessage.Text 
= "<li>Item Command!";

}


void  DataList1_EditCommand(  object  s, DataListCommandEventArgs e )  {

       lblMessage.Text 
+= "<li>Editing Item!";

}
  

void  DataList1_DeleteCommand(  object  s, DataListCommandEventArgs e )  {

       lblMessage.Text 
= "<li>Deleting Item!";

}


void  DataList1_UpdateCommand(  object  s, DataListCommandEventArgs e )  {

       lblMessage.Text 
= "<li>Updating Item!";

}


</ Script >

< html >

< head >< title > DataListEvents.aspx </ title ></ head >

< body >

< form Runat = " Server " >

< asp:Label

  ID
= " lblMessage "

  BackColor
= " yellow "

  Runat
= " Server "   />

< p >

< asp:DataList

  ID
= " DataList1 "

  OnItemCommand
= " DataList1_ItemCommand "

  OnEditCommand
= " DataList1_EditCommand "

  OnDeleteCommand
= " DataList1_DeleteCommand "

  OnUpdateCommand
= " DataList1_UpdateCommand "

  GridLines
= " Both "

  CellPadding
= " 4 "

  Runat
= " Server " >

< ItemTemplate >

  
<% #DataBinder.Eval(Container.DataItem,  "  au_fname  "  ) %>

  
< br >

  
< asp:LinkButton

    Text
= " Edit! "

    CommandName
= " edit "

    Runat
= " Server " />

  
< asp:LinkButton

    Text
= " Delete! "

    CommandName
= " delete "

    Runat
= " Server " />

  
< asp:LinkButton

    Text
= " Update! "

    CommandName
= " update "

    Runat
= " Server " />

</ ItemTemplate >

</ asp:DataList >

</ form >

</ body >

</ html >

在DataList中显示的三个LinkButton控件分别与相应的程序相关联。当点击名为delete的LinkButton控件的时候,就触发DataList控件DeleteCommand事件,该事件与DataList1_DeleteCommand函数相关联。

大家注意到与DataList关联的函数都带有一个DataListCommandEventArgs的参数。该阐述表示从DataList传递给该函数的信息。DataListCommandEventArgs具有如下属性:

         CommandArgument:表示来自于产生该事件的控件的CommandArgument属性值。

         CommandName:表示产生该事件的命令名称。

         CommandSource:表示产生该事件的DataList控件。

         Item:表示来自DataList的项。就是DataList中发生事件的那一项。该属性非常有用,在后面的章节中会经常使用到! 


http://chatgpt.dhexx.cn/article/UOueFQ4B.shtml

相关文章

(13)<datalist> 标签

一、<datalist>标签的作用 <datalist> 标签规定了<input> 元素可能的选项列表。<datalist>元素包含了一组<option>元素&#xff0c;这些元素表示预定义可选值&#xff0c;在<input>元素输入过程中&#xff0c;会自动响应<option>元…

Hibernate缓存的evict、clear和flush方法

evict()、clear()和flush()方法是Hibernate缓存的3种基本操作方法&#xff0c;本文主要介绍这3种方法的使用方式和具体区别。 Company表&#xff1a; Company实体类&#xff1a; import java.util.Set;public class Company {private int companyId;private String companyName…

注册中心日志输出_Running the evict task with compensationTime 0ms_频繁输出这句_SpringCloud工作笔记161

可以在:application.properties 中配置一下不停的打印日志,太烦人了.##Running the evict task with compensationTime 0ms不停的输出这个太烦人了可以关闭 logging.level.com.netflixwarn技术交流QQ群【JAVA,C,Python,.NET,BigData,AI】&#xff1a;170933152 开通了个人技术微…

SpringCloud Eureka注册中心日志输出问题:Running the evict task with compensationTime 0ms

动Eureka注册中心后&#xff0c;控制台一直输出 — [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 这段日志&#xff0c;间隔时间与你的配置有关。强迫症看着很烦&#xff0c;那么在开发过程中如何关闭这条日…

HashMap中的putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict)解读

在面试中我们会经常遇到关于HashMap的问题&#xff0c;这里我写了我对HashMap里面一个挺重要的方法 putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict)的理解&#xff0c;下面就是我对这个方法的理解。 其实putVal(int hash, K key, V value, boolean o…

org.hibernate.Session.evict(Object object)方法的使用

在一个实体A、B的关联关系中&#xff0c;如下图&#xff1a; B外键关联A&#xff0c;关联字段A_id A中保存有B的集合blist 在A的实体属性blist&#xff0c;使用懒加载注解&#xff0c;如下: OneToMany(targetEntityB.class, cascade CascadeType.ALL, fetch FetchType.LAZY)…

mysql evict_Hibernate的flush()和evict()

/** * 测试uuid主键生成策略 */ public void testSave1() { Session session null; Transaction tx null; try { session HibernateUtils.getSession(); tx session.beginTransaction(); User1 user new User1(); user.setName("李四"); user.setPassword("…

Ceph Cache Tier中flush和evict机制源码分析

存储系统&#xff1a;ceph-14.2.22 操作系统&#xff1a;ubuntu-server-16.04.07 OSDService::agent_entry [ ceph/src/osd/OSD.cc ] OSD服务启动过程中会创建一个名为osd_srv_agent的线程&#xff0c;在分层存储中&#xff0c;该线程负责缓存池与数据池之间的数据迁移工作。该…

HashMap evict 放逐之旅

HashMap evict 放逐之旅 我不认识的evict小结 我不认识的evict 正在撸猫写代码的我&#xff0c;遇到了一个LinkedHashMap ConcurrentModifyException&#xff0c;真是让人头秃。问题排查过程也是费了一些力气&#xff08;手动狗头&#xff09;&#xff0c;最后发现是我异步请求…

Redis源码剖析之内存淘汰策略(Evict)

文章目录 何为Evict如何EvictRedis中的Evict策略源码剖析LRU具体实现LFU具体实现LFU计数器增长LFU计数器衰减 evict执行过程evict何时执行evict.c 总结 Redis作为一个成熟的数据存储中间件&#xff0c;它提供了完善的数据管理功能&#xff0c;比如之前我们提到过的 数据过期和…

WiredTiger系列2:Eviction详解

Eviction Evict的实质主要是将内存中的page淘汰出内存&#xff0c;简单来说&#xff0c;当cache里面的“脏页”达到一定比例或cache使用量达到一定比例时&#xff0c;wt就会触发相应的evict page线程来将pages&#xff08;包含干净的pages和脏pages&#xff09;按一定的算法&a…

onload事件

onload事件&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript">//onload事件的方法function onloadFun(){alert(静态注…

onUnload事件

1. 首先JavaScript会使我们有能力创建动态页面然后JavaScript是可以被侦测到事件行为的然而在网页中的每一个元素都将可以来产生某些可以触发JavaScript的函数的事件就可以打个比方说我们在用户中里面点击某个按钮时的产生的某一个onClick 事件来触发某个函数之后就在事件中在H…

script标签的onload事件的触发时机

onload事件在资源被加载完成后会被触发。对于script标签&#xff0c;在外部js文件被加载后代码会被立即执行。那么&#xff0c;外部js文件中的代码和该script标签的onload回调函数&#xff0c;它们的执行顺序是怎样的呢&#xff1f;没有找到官方的说明文档&#xff0c;所以自己…

load事件

javaScript中最常用到的一个事件就是load。当页面完全加载后&#xff08;包括所有图像、javaScript文件、css文件等外部资源&#xff09;&#xff0c;就会触发window上边的load事件。 window&#xff1a; window.addEventListener(load, function(e) {console.log(页面完全加…

onload 和 onunload 事件

onload 和 onunload 事件会在用户进入或离开页面时被触发。onload 事件可用于检测访问者的浏览器类型和浏览器版本&#xff0c;并基于这些信息来加载网页的正确版本。onload 和 onunload 事件可用于处理 cookie。 onmousedown,onmouseup 以及 onclick 构成了鼠标点击事件的所有…

window的onload事件的用法

1.最简单的用法 注&#xff1a;奇葩&#xff0c;我没用过 2.在JS语句调用&#xff08;正确使用姿势&#xff09; 或使用jquery onload 事件会在页面或图像加载完成后立即发生。 3.window.onload()的加载问题 由于HTML加载时由上往下的&#xff0c;在HTML加载的时候&#…

JS中window.onload事件详解

window.onload出现的原因&#xff1f;  我们都知道页面的代码顺序是从上往下进行加载&#xff0c;很多时候我们要对页面中的某一个模块进行操作&#xff0c;这时候我们常常使用javascript代码来进行操作。为了能够保证操作的模块或对象在js代码之前就加载了&#xff0c;我们不…

浏览器的onload事件

如下代码&#xff0c;因为代码从上到下执行&#xff0c;btn节点还未创建好就去获取会报错 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge&q…