关于DataGrid中的进度条的显示
来源:互联网 发布:node pm2 使用 编辑:程序博客网 时间:2024/05/17 07:01
有时候我们会需要在报表中用图片的方式显示项目的进度,例如用进度条,所以我做了一个练习
一 传统进度条
1.首先要添加一个.ashx的一般处理程序文件用于接收参数,设置进度条
代码如下:
<%@ WebHandler Language="C#" Class="GridviewHandler" %>using System;using System.Web;using System.Drawing;using System.Drawing.Drawing2D;public class GridviewHandler : IHttpHandler { public void ProcessRequest (HttpContext context) { //接受百分比 decimal rateOfProcess = decimal.Parse(context.Request.QueryString["rateOfProcess"]); //Bitmap 处理用像素数据定义的图像的对象 using (Bitmap bitmap = new Bitmap(100, 16)) { //从bitmao像素对象中绘制图像 using (Graphics graphics = Graphics.FromImage(bitmap)) { //设置图像质量,消除锯齿 graphics.SmoothingMode = SmoothingMode.AntiAlias; //消除背景色,用于重新定义 graphics.Clear(Color.White); //定义矩形,并设置矩形的位置及宽高 Rectangle rect = new Rectangle(0, 0, 100, 16); //用钢笔黑色绘制矩形 graphics.DrawRectangle(Pens.Black, rect); //由百分比获取矩形应显示的宽度 int widtn = Convert.ToInt32(rateOfProcess); //定义与基本矩形位置,高度相同的矩形填充基本矩形 Rectangle rectInside=new Rectangle(0,0,widtn,16); if (widtn == 100) { //进度为100%时用蓝色矩形填充基本矩形 graphics.FillRectangle(Brushes.Blue, rectInside); } else if (widtn == 0) { graphics.FillRectangle(Brushes.Gray, rectInside); } else { graphics.FillRectangle(Brushes.Green, rectInside); } //输出httl mime 类型 //gif/text 先图片后文子 context.Response.ContentType = "gif/text"; //清空缓存 context.Response.Clear(); context.Response.BufferOutput = true; //像素对象以gif格式保存输出的数据流 bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif); } } //context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } }}
2.在绑定列表中添加img标签,代码如下:
<asp:TemplateColumn HeaderText="项目进度"> <ItemTemplate> <img alt='<%# "按原计划已完成:"+Convert.ToDecimal(Eval("RateProcess")).ToString("F2")+"%" %>' src="<%#"GridviewHandler.ashx?rateOfProcess="+Eval("RateProcess") %>" /> <asp:Label ID="lbl1" runat="server" Text='<%#Convert.ToDecimal(Eval("RateProcess")).ToString("F2")+"%" %>'></asp:Label> </ItemTemplate> </asp:TemplateColumn>
3.页面显示效果如下:
二 自定义图片的进度条
前段时间有需要要做有特色的节点式的进度条,即整个阶段分为不同节点,完成一个节点,进度条填充对应的一部分:
样式定义如下:
.kpms-progressul {list-style:none; height:18px; line-height:18px; padding:0px; margin:0px;}.kpms-progressul li {text-align:center; width:81px; padding:0px;margin:0px; display:block;float:left;font-size:7pt!important; }.kpms-progressliready{background:url(images/proready.gif) no-repeat; color:#000;}.kpms-progressli{background:url(images/pronormal.gif) no-repeat; color:#999;}
绑定列表后添加进度条代码如下:
前台:
<asp:TemplateField HeaderText="卷册进度"> <ItemStyle Width="45%" /> <ItemTemplate> <input id="hiRollStateID" runat="server" type="hidden" value='<%#DataBinder.Eval(Container.DataItem,"RollStateID") %>' /> </ItemTemplate> </asp:TemplateField>
后台:
protected void lpdgEnd_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int rollState = 0; rollState = Convert.ToInt16((e.Row.FindControl("hiRollStateID") as System.Web.UI.HtmlControls.HtmlInputHidden).Value); //rollState =Convert.ToInt16( e.Row.Cells[8].Text.ToString()); System.Web.UI.HtmlControls.HtmlContainerControl div1 = new HtmlGenericControl(); div1.InnerHtml = GetRollStateDiv(rollState); // Page.Controls.Add(div1); e.Row.Cells[7].Controls.Add(div1); } }
效果图:
三 样式进度条
这种进度条的定义非常简单,且优化性能,定义一个样式即可
<asp:TemplateField HeaderText="设计(%)" ItemStyle-Width="170px"> <ItemTemplate> <asp:LinkButton ID="lbtnDesign" runat="server"> <span class="kpms-complete"><span class="kpms-completed" style=" width:<%#Eval("FinishRate") %>px"></span></span> </asp:LinkButton> <asp:Label ID="lblDesignSch" runat="server" Text='<%#Convert.ToDecimal(DataBinder.Eval(Container.DataItem,"FinishRate")).ToString("F2")+"%" %>'></asp:Label> </ItemTemplate> </asp:TemplateField>
进度条需要的样式如下:
/*进度条*/.kpms-complete{ width:100px; border:#ccc 1px solid; background:#fff; height:15px;display:inline-block; float:left;}.kpms-completed{ background:#0C0; height:15px;display:block;}
- 关于DataGrid中的进度条的显示
- java中的进度条的显示
- easyui datagrid控制显示进度条
- 关于多线程执行显示进度条的实例
- 关于多线程执行显示进度条的实例!
- WPF中的DataGrid的RowDetail显示问题
- 关于datagrid的表中的数据获取
- 【Qt5开发及实例】10、关于进度条的显示
- 关于DataGrid自动分页的不能显示的问题
- 关于 过时的 蛋疼的 MFC + DataGrid 显示设置
- DataGrid Repeater关于绑定列过长截断显示的问题
- 关于数据库的中的Date类型的数据,在datagrid中显示为字符串格式(例如显示效果2017-10-1)
- EasyUI datagrid json嵌套的object数据在datagrid中的显示方法
- 关于datagrid中的字符串转换
- 关于VB中的DataGrid控件的一个问题
- 关于进度条的研究
- 关于进度条的操作
- 关于进度条的操作
- Java正则表达式识别中文
- Composite (组合模式)
- 精品JS代码收藏大全
- Android动态全屏与退出全屏
- js 操作select 下拉框集合常见操作方法
- 关于DataGrid中的进度条的显示
- Android命令行签名另附jdk1.7签名无法安装的解决办法
- Android实现指定区域截屏的实现
- Mysql、SqlServer和Oracle 添加修改删除字段sql
- HDU 3255 Farming
- Android简单的广告控件View
- linux下C编程 实现即时按键检测
- excel 冻结行 在拖动的时候有的行固定有的行隐藏 (中英文版)
- 一句话 之 tool -- Dfsrdiag DFS 复制诊断工具