热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataList内容详解

DataList是另一种显示数据控件,它与GridView不同的是,它全部使用模板进行设计,并且DataList的模板是对整行设置

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

在DreamWeaver中的模板如下


项模板


页眉页脚模板


在使用的时间我们一般与DreamWeaver结合使用,在DreamWeaver中做好界面复制到相关模板中使用。
一、用DataList实现简单的二维表格形式的显示
    下面是我们在DataList中创建完页眉模板与项模板后的代码,页眉的代码被放在标记中间,而普通项的代码被放在标记中间。
   
       
           


               

                   

                   

                   

                   

                   

                   

               

           

                       
编号

                   

                       
名称

                   

                       
价格

                   

                       
产地

                   

                       
货架

                   

                       
图片

                   

       
       
           
               
                   
                   
                   
                   
                   
                   
               
           

                       
<%# Eval("Ids") %>

                   

                       
<%# Eval("name") %>

                   

                       
<%# Eval("price") %>

                   

                       
<%# Eval("source") %>

                   

                       
<%# Eval("stack") %>

                   

                       
<%# Eval("image") %>

                   

       
   
    由于模板内容是我们复制过来的Table表格&#xff0c;所以在数据绑定的时间系统不知道该把数据源的值显示在哪个td标记里面。为此我们使用<%# Eval("列名")%>来手动指定DataList如何绑定至数据源
    这里需要说明的是DataList只支持单向绑定&#xff0c;所以当你使用<%# Bind()%>进行绑定时也只是一种单向绑定的效果&#xff0c;而不像GridView那样双向绑定。因为DataList使用的是单项绑定&#xff0c;所以它无法像GridView那样自动产生更新与删除的效果&#xff0c;如果想实现更新删除的功能的话则需要我们手动编写代码了。    (车延禄)
    运行效果&#xff1a;
    

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

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


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


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

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


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


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


    第三步&#xff1a;在EditCommand事件中编写代码&#xff0c;把当前项用编辑模板显示出来
    


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

    运行效果&#xff1a;
    

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

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

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



推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
author-avatar
mobiledu2502898167
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有