Gridview 重建表头/单击单元格弹出对话框/改变单…

2018-06-17 19:10:26来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

整理工作~

完整的代码在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[0].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[1].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[2].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[3].Text = "xxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[4].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[5].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[6].Text = "xxxx.";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[7].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[8].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[9].Text = "xxxxx";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[10].Text = "Status";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[11].Text = "Remarks";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[12].Text = "Month";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[13].Attributes.Add("colspan", "31");
                    tcHeader[13].Text = "xxxx Data";

                    break;
            }

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

  if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton _singleClickButton = (LinkButton)e.Row.Cells[0].Controls[0];
                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
                    string js = _jsSingle.Insert(_jsSingle.Length - 2, 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列为单击可关闭列,代码如下

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

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:使用Task的一些知识优化了一下同事的多线程协作取消的一串代码

下一篇:SqlCommandBuilder类是如何构建T-Sql语句