• 一个页面搞定几乎所有的列表需求的实现思路和一点代码。


     

         前情回顾 分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?

     

         其实如果要单独实现一个能够显示数据的表格,那么是很简单的,写一个for循环,把DataTable里面数据循环出来就OK了。相信大家都会做吧,如果是从asp走过来的应该更不陌生吧。

         上一篇说了,我们要根据表里面的记录来确定显示哪些列,哪一列在前,哪一列在后。那么怎么做呢?我们先定义一个类来存放这些信息。

     public class GridColumnsInfo
        {
            public int ColumnID = 0;
          public string ColSysName = "";
            public string ColName = "";
            public string ColType = "";
            public string ColWidth = "";
            public string ColAlign = "";
            public string Format = "";
            public int MaxLength = 0;

        }

         然后我们继承 System.Web.UI.WebControls.DataBoundControl,来创建一个自己的显示数据的控件。GridView就是继承的这个基类,我们也先照猫画虎来一个吧。public class myGrid : DataBoundControl    {}

         DataBoundControl 已经为我们做了不少的事情,比如定义了DataSource属性,还有DataBind()事件,其他的属性、事件我们暂时用不到,就先不管了。DataSource直接用就可以了,不用修改;而DataBind()就需要override一下了。

         我们还要先定义一个 Dictionary,用于存放GridColumnsInfo集合。然后写一个public void LoadGridColumnsInfo()函数来加载信息。

     public Dictionary<int, GridColumnsInfo> dic_GridCols ;

    DataBind() 里面主要分为两个部分,第一部分绘制页眉,第二部分就是循环数据了。

     #region 输出页眉
                str.Append("<TR class=\"css_GridTR\">");
               
                foreach (KeyValuePair<int, GridColumnsInfo> entry in dic_GridCols)
                {
                    str.Append("<TD>");
                    str.Append(((GridColumnsInfo)entry.Value).ColName);
                    str.Append("</TD>");
                }
                str.Append("</TR>");
                #endregion


         然后是循环输出数据,感觉这些也没有什么好说的,自己都觉得挺苦燥的。还是说一下行交替颜色的实现方法吧。用控件的形式输出一个table,首先要处理的就是样式,表格的样式要足够的灵活,否则的话就会有不好用的感觉。GridView用了很多的属性来进行描述,这个太复杂了,不和人家学了,来个简单一点的吧。样式/CSS,恩,就交给CSS来处理吧,定义几个css:

    css_Grid1 :描绘table,
    css_GridTR:描绘页眉,
    td:控制td,
    css_TR_c1、css_TR_c2、css_TR_c3...css_TR_cn: 来定义行交替色,这个数量就看要用多少种颜色来进行

    交替了。

    css_TR_move :鼠标经过时的样式;
    css_TR_CK: 鼠标单击杭的样式。

         最后就是写几个js函数来控制鼠标经过和单击的效果。

         这里有演示效果。http://www.cnblogs.com/jyk/archive/2008/07/28/1255077.html

         好像有点乱。这里主要是想说如何根据配置信息来显示table,但是好像变成了介绍如何实现行的交替变色和点击行变色了。

         在下面就要做表单控件了。整理成一个完整一点的示例,在提供源码吧。

     

    附源码:

    /// <summary>
        
    /// 专门显示数据的控件
        
    /// </summary>

        [DefaultProperty("Text")]
        [ToolboxData(
    "<{0}:myGrid runat=server></{0}:myGrid>")]
        
    public class myGrid : DataBoundControl 
        
    {
            
    ==============================句柄==============================

            
    数据访问实例的设置

            
    成员和属性


            
    /// <summary>
            
    /// 存放列表用的字段的描述信息,key:字段ID,value:GridColumnsInfo
            
    /// </summary>

            public Dictionary<int, GridColumnsInfo> dic_GridCols ;//= new Dictionary<int, GridColumnsInfo>();

            
    从数据库的配置信息里面提取列表用的字段信息

            
    /// <summary>
            
    /// 绑定数据
            
    /// </summary>

            public override void DataBind()
            
    {
                
    if ((base.Site != null&& base.Site.DesignMode)
                
    {
                    
    //设计模式,退出
                    return;
                }


                
    加载配置信息

                System.Text.StringBuilder str 
    = new StringBuilder(1000);
                str.Append(
    "<Table class=\"css_Grid\">");
                       
     
                
    输出页眉

                
    输出数据

                str.Append(
    "</Table>");

                
    this.Controls.Add(new LiteralControl(str.ToString()));

            }


        }

  • 相关阅读:
    基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
    .CS文件编译生成.DLL文件 .EXE文件(C#网络搜集)(转)
    SQL SERVER 2005及以上查看各表的记录数及占空间大小
    sql2008生成insert语句
    jdk chm文档下载地址
    source insight 解决自动缩进 和 TAB键=4个SPACE
    Hibernate的Criteria的使用
    java多线程协作: wait/notifyAll ( Cooperation between tasks )
    Eclipse 去掉JavaScript Validator
    jquery 插件示例, jquery popup 插件
  • 原文地址:https://www.cnblogs.com/jyk/p/1255101.html
Copyright © 2020-2023  润新知