DataList内容详解

article/2025/8/16 11:08:45

DataList是另一种显示数据控件,它与GridView不同的是,它全部使用模板进行设计,并且DataList的模板是对整行设置,而不是像GridView那样只对某一列进行模板设计。
正是由于它使用模板进行设计,所以它的灵活性比GridView更高,但事情总是有两面性的,灵活度提高了,必然带来使用上的复杂。因此DataList在易用性上真的不如GridView好,因此在要求有较高灵活性的时候我们最好使用DataList控件。    (车延禄)
DataList控件在页面上的初始外观很简单

在DreamWeaver中的模板如下


项模板


页眉页脚模板


在使用的时间我们一般与DreamWeaver结合使用,在DreamWeaver中做好界面复制到相关模板中使用。
一、用DataList实现简单的二维表格形式的显示
    下面是我们在DataList中创建完页眉模板与项模板后的代码,页眉的代码被放在<HeaderTemplate>标记中间,而普通项的代码被放在<ItemTemplate>标记中间。
    <asp:DataList ID="DataList1" runat="server" Width="100%">
        <HeaderTemplate>
            <table border="0" width="100%" border=0 cellspacing=0>
                <tr bgcolor="#339999">
                    <td width="15%">
                        <div align="center">编号</div>
                    </td>
                    <td width="20%">
                        <div align="center">名称</div>
                    </td>
                    <td width="15%">
                        <div align="center">价格</div>
                    </td>
                    <td width="15%">
                        <div align="center">产地</div>
                    </td>
                    <td width="15%">
                        <div align="center">货架</div>
                    </td>
                    <td width="20%">
                        <div align="center">图片</div>
                    </td>
                </tr>
            </table>
        </HeaderTemplate>
        <ItemTemplate>
            <table bgcolor="#F0F6F7" border="0" width="100%" border=0 cellspacing=0>
                <tr bgcolor="#99FF33">
                    <td width="15%">
                        <div align="center"><%# Eval("Ids") %></div>
                    </td>
                    <td width="20%">
                        <div align="center"><%# Eval("name") %></div>
                    </td>
                    <td width="15%">
                        <div align="center"><%# Eval("price") %></div>
                    </td>
                    <td width="15%">
                        <div align="center"><%# Eval("source") %></div>
                    </td>
                    <td width="15%">
                        <div align="center"><%# Eval("stack") %></div>
                    </td>
                    <td width="20%">
                        <div align="center"><%# Eval("image") %></div>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:DataList>
    由于模板内容是我们复制过来的Table表格,所以在数据绑定的时间系统不知道该把数据源的值显示在哪个td标记里面。为此我们使用<%# Eval("列名")%>来手动指定DataList如何绑定至数据源
    这里需要说明的是DataList只支持单向绑定,所以当你使用<%# Bind()%>进行绑定时也只是一种单向绑定的效果,而不像GridView那样双向绑定。因为DataList使用的是单项绑定,所以它无法像GridView那样自动产生更新与删除的效果,如果想实现更新删除的功能的话则需要我们手动编写代码了。    (车延禄)
    运行效果:
    

    如果你对这个页面不太满意的话,那你可以打开源页面对其中的Table表格进行样式设置达到满意的效果。

    思考:如何把图片也显示出来?
    思考:如何把普通项和交替项实现不同的背景色?
   
二、用DataList实现不规则的显示    (车延禄)
    像上个例子,如果我们把图片显示出来的话,那图片会把我们的数据行撑大,这样的界面很不美观,我们可以把界面设置为如下方式:
    


    这种样式的显示其实很简单,只需要把模板列变一下就可以了
    


    然后再在源代码相应位置处用<%# Eval("")%>绑定到数据源中就可以了。

    要想一行显示多个水果的话,请设置RepeatColumns和RepeatDirection两个属性。
        RepeatColumns属性:设置一行显示几项
        RepeatDirection属性:设置项的布局方式。Virtical-竖排优先,Horizontal-以行优先
    


   
三、用DataList实现更新和删除
    用DataList修改和更新
    第一步:在普通项模板或交替项模板中加入一个按钮,并把该按钮的CommandName设为edit。
    
    


    第二步:编辑EditTemplate,在其中要执行修改的地方加入文本框或其它控件,并加入“更新”和“取消”两个按钮,分别把这两个按钮的CommandName设为update和cancel
    


    第三步:在EditCommand事件中编写代码,把当前项用编辑模板显示出来
    


    第四步:在UpdateCommand事件中编写代码把修改完的数据更新回数据库,在CancelCommand事件中编写代码,把当前项变回普通项状态

    运行效果:
    

    在DataList中常用的事件:
        ItemCreated:项创建完成时触发,与GridView中的RowCreated事件相似
        ItemDataBound:数据绑定完成时触发,与GridView中的RowDataBound事件相似
        CancelCommand:当CommandName是cancel的按钮被点击时触发该事件
        DeleteCommand:当CommandName是delete的按钮被点击时触发该事件
        EditCommand:当CommandName是edit的按钮被点击时触发该事件
        UpdateCommand:当CommandName是update的按钮被点击时触发该事件
        SelectedIndexChanged:当CommandName是select的按钮被点击时触发该事件
        ItemCommand:任何一个按钮被点击时触发该事件,包括CommandName是
cancel,delete,edit,update,selected的按钮
       
四、DataList分页    (车延禄)
    DataList默认不带分页功能,但可以与PagedDataSource对象结合使用进行分页,但对于页数比较多的情况下,这种分页方式太耗费资源,所以建议使用存储过程分页
   分页的存储过程:
    --取得分页的总页数
    create proc UP_CAR_PAGECOUNT
@pagesize int
    AS
     declare @c int
     select @c = count(*) from car
     return ceiling(cast(@c as float)/cast(@pagesize as float))
    GO
    --分页的存储过程
    create proc UP_CAR_PAGESELECT
     @pagesize int,
     @nowpage int--,
    AS
     declare @c int
     declare @num int
     select @num = (@nowpage-1) * @pagesize
     select @c = count(*) from car
     if @pagesize > 0
     begin
      declare @cmd varchar(1000)
      select @cmd = 'select top '+ cast(@pagesize as varchar(50))+' * from car as c1 where code not in (select top '+cast(@num as varchar(50))+' code from car as c2 order by c2.code) order by c1.code'
      exec (@cmd)
     end
    GO
   
    数据访问类代码:
    public int GetPageCount(int pagesize)
    {
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "UP_CAR_PAGECOUNT";
        cmd.Parameters.AddWithValue("@pagesize", pagesize);
        cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
        conn.Open();
        cmd.ExecuteNonQuery();
        int n = (int)cmd.Parameters["@RETURN_VALUE"].Value;
        conn.Close();
        return n;
    }
    public List<CarData> select(int pagesize, int nowpage)
    {
        List<CarData> list = new List<CarData>();
        CarData data;
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "UP_CAR_PAGESELECT";
        cmd.Parameters.AddWithValue("@pagesize", pagesize);
        cmd.Parameters.AddWithValue("@nowpage", nowpage);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();

        while (dr.Read())
        {
            data = new CarData();
            data.Ids = (int)dr["ids"];
            data.Code = (string)dr["code"];
            data.Name = (string)dr["name"];
            data.Brand = (string)dr["brand"];
            data.Time = (DateTime)dr["time"];
            data.Oil = (decimal)dr["oil"];
            data.Powers = (int)dr["powers"];
            data.Exhaust = (int)dr["exhaust"];
            data.Price = (decimal)dr["price"];
            data.Pic = (string)dr["pic"];
            list.Add(data);
        }
        conn.Close();
        return list;
    }
    页面调用代码:
    private const int PAGESIZE = 5;
    protected void Page_Load(object sender, EventArgs e)
    {
        int pagecount = new CarDA().GetPageCount(PAGESIZE);
        for (int i = 0; i < pagecount; i++)
        {
            LinkButton lb = new LinkButton();
            lb.Text = (i+1).ToString();
            lb.Click += new EventHandler(lb_Click);
            Panel1.Controls.Add(lb);
            Literal lt = new Literal();
            lt.Text = "&nbsp;";
            Panel1.Controls.Add(lt);
        }
        if (!IsPostBack)
        {
            BindList("1");
        }
    }
    private void BindList(string nowpage)
    {
        ObjectDataSource1.TypeName = "CarDA";
        ObjectDataSource1.SelectMethod = "select";
        ObjectDataSource1.SelectParameters.Clear();
        ObjectDataSource1.SelectParameters.Add("pagesize", PAGESIZE.ToString());
        ObjectDataSource1.SelectParameters.Add("nowpage", nowpage);
        DataList1.DataSourceID = ObjectDataSource1.ID;
    }
    void lb_Click(object sender, EventArgs e)
    {
        LinkButton lb = (LinkButton)sender;
        BindList(lb.Text);
    }

转载于:https://www.cnblogs.com/A2008A/articles/1423722.html


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

相关文章

DataList控件详细用法(一)

使用DataList控件 本章内容&#xff1a; 1、理解事件冒泡 2、使用模板 3、在DataList中显示数据 4、在DataList中创建多列 5、捕获DataList控件中产生的事件 6、选择DataList中的项 7、使用DataList控件中的DataKeys集合 8、编辑DataList中的项 本章介绍在ASP.NET框架中功能…

(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;我们不…