整理工作~

完整的代码在GitHub上, 路径:

项目背景:追踪某个issue,并且记录每天的状态。

要求:1、点击日期就能更改,并且用颜色标志不同的状态

    2、增加按钮可关闭issue

    3、布局要求日期横排放在追踪信息之后

刚拿到这简短干练的需求之后,有点懵,sample图都没有,都凭自己想象了。主要提需求的都是一群完全不懂开发的人,真的是完全、完全、完全不懂!!!怀念在软件公司的日子。。。。。。

大概想了一下,画了张类似下面截图的草图并且根据要求详细地写了一份Specification,一致通过之后,就开始准备写这个功能了。。。。

废话不多说,直接看图和代码吧~

效果图:

前台.aspx 代码比较简短,只绑定了一个不可见的ButtonField, 用于单元格单击事件

后台主要代码片断

重建表头在事件gvData_RowCreated里面

 switch (e.Row.RowType)
            {
                   case DataControlRowType.Header:
                    TableCellCollection tcHeader = e.Row.Cells;
                    tcHeader.Clear();
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxx.";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "Status";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "Remarks";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Text = "Month";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[].Attributes.Add(");
                    tcHeader[].Text = "xxxx Data";

                    break;
            }

单击事件代码, 首先需要设置从哪一列开始可单击弹出框,然后在RowDataBound事件中允许单击并弹出框

  if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton _singleClickButton = (LinkButton)e.Row.Cells[].Controls[];
                string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
                //add events to each editable cell
                for (int columnIndex = _firstEditCellIndex; columnIndex < e.Row.Cells.Count; columnIndex++)
                {
                    //add the column index as the event argument parameter
                    , columnIndex.ToString());
                    e.Row.Cells[columnIndex].Attributes["onclick"] = js;
                    e.Row.Cells[columnIndex].Attributes["style"] += "cursor:pointer;cursor:hand;";
                    e.Row.Cells[columnIndex].Attributes.Add("onclick", "openWin('" + requestNo + "','" + month + "','" + date + "');");

                }
            }

改变单元格背景色同样在RowDataBound中

 if (date.Contains("P"))
                        {
                            date = date.TrimEnd('P');
                            e.Row.Cells[columnIndex].BackColor = ColorTranslator.FromHtml("#525f6b");
                        }
                        if (date.Contains("Y"))
                        {
                            date = date.TrimEnd('Y');
                            e.Row.Cells[columnIndex].BackColor = ColorTranslator.FromHtml("#fac970");
                        }
                        if (date.Contains("L"))
                        {
                            date = date.TrimEnd('L');
                            e.Row.Cells[columnIndex].BackColor = ColorTranslator.FromHtml("#15a452");
                        }
                        if (date.Contains("R"))
                        {
                            date = date.TrimEnd('R');
                            e.Row.Cells[columnIndex].BackColor = Color.Red;
                        }
                        if (date.Contains("B"))
                        {
                            date = date.TrimEnd('B');
                            e.Row.Cells[columnIndex].BackColor = ColorTranslator.FromHtml("#004986");
                        }
                        e.Row.Cells[columnIndex].Text = date;

设置Status列为单击可关闭列,代码如下

   , .ToString());
   e.Row.Cells[].Attributes["onclick"] = editJs;
   e.Row.Cells[].Attributes["style"] += "cursor:pointer;cursor:hand;";
   ].Text == "Ongoing")
      e.Row.Cells[].Text = "<img  src='../Images/page_white_edit.png'/>";
   ].Text == "Closed")
      e.Row.Cells[].Text = "<img  src='../Images/accept-f.png'/>";
   e.Row.Cells[].Attributes.Add("onclick", "openCloseWin('" + requestNo + "');");

可能实现的方法不是很好,请多指教~

Gridview 重建表头/单击单元格弹出对话框/改变单元格背景色的更多相关文章

  1. qtableview 鼠标划过单元格弹出标签显示单元格内容

    QStandardItem *item = new QStandardItem(show_content); infoTableModel->setItem(1, 1, item); item- ...

  2. java selenium (十一) 操作弹出对话框

    Web 开发人员通常需要利用JavaScript弹出对话框来给用户一些信息提示, 包括以下几种类型 阅读目录 对话框类型 1.  警告框: 用于提示用户相关信息的验证结果, 错误或警告等 2. 提示框 ...

  3. dos命令弹出对话框---Msg命令详解

    标签: dos批处理对话框 2015-11-12 17:20 497人阅读 评论(0) 收藏 举报 脚本(30)  版权声明:本文为博主原创文章,未经博主允许不得转载. dos命令弹出对话框---Ms ...

  4. NET使用了UpdatePanel后如何弹出对话框!

    原文:NET使用了UpdatePanel后如何弹出对话框! 在ajax中的UpdatePanel弹出对话窗,可以使用: ScriptManager.RegisterStartupScript(Upda ...

  5. JavaScript中的三种弹出对话框

    学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性 ...

  6. js弹出对话框的三种方式(转)

    原文地址:https://www.jb51.net/article/81376.htm javascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom ...

  7. 02 - Unit06:弹出对话框

    弹出对话框 如何实现弹出 //弹出出对话框 $("#can").load("alert/alert_notebook.html"); //显示背景色 $(&qu ...

  8. [Firefox附加组件]0003.弹出对话框

    Firefox中使用面板(panel)模块来显示弹出对话框,面板的内容通过HTML编写.你可以在面板上运行content script,尽管在面板里的脚本无法直接访问插件代码,但是你可以在面板脚本和插 ...

  9. 10.JAVA之GUI编程弹出对话框Dialog

    在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...

随机推荐

  1. Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式

    解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...

  2. 6.00.1x Introduction to computation

    6.00 Introduction to Computer Science                  and  Programming • Goal: –Become skillful at ...

  3. 以Tomcat+Mysql为例,实现Docker多容器连接

    Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问. 但网络端口映射方式并不是Docker中连接多个容 ...

  4. [html5] 学习笔记-改良的input元素种类

    在html5中,大幅度增加与改良了input元素的种类,可以简单的使用这些元素来实现之前需要JS脚本来实现的功能. 1.url类型.email类型.date类型.time类型.datetime类型.d ...

  5. 穷举 迭代 while

    for循环拥有两类: 穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 例:1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元.求刚好花 ...

  6. gevent调度流程解析

    gevent是目前应用非常广泛的网络库,高效的轮询IO库libev加上协程(coroutine),使得gevent的性能非常出色,尤其是在web应用中.本文介绍gevent的调度流程,主要包括geve ...

  7. MongoDB基础之八 备份与恢复

    Mongodb导出与导入 1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.所以,都有如下通用选项:-h host 主机--port port 端口-u username 用户名 ...

  8. Oracle VS DB2 数据类型

    =========================Oracle VS DB2==================================== 本文转自:http://www.bitscn.co ...

  9. Python学习--17 进程和线程

    线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 进程 fork调用 通过fork()系统调用,就可以生成一个子进程 ...

  10. C语言的函数类型

    C语言的函数类型与返回值类型不一致时出现,是以函数类型为标准; 而如果在java与c#语言中上述情况是编译错误的;