分享Winform datagridview 动态生成中文HeaderText
1.贡献个Winform自定义控件,信用卡、银行卡输入控件;每4个字符分隔显示。其他UI框架可以参考。2.印章WinForm自定义控件封装,提供源码下载3.Windows高速定时器,多媒体定时器winmm.dll库的使用4.理解SynchronizationContext,如何在Winform里面跨线程访问UI控件5.C#winform程序关闭计算机的正确姿势6.WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面
7.分享Winform datagridview 动态生成中文HeaderText
8.Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬9.WinForm调用钉钉获取考勤结果10.C# Winform 实现Ajax效果自定义按钮11.C#Winform 自定义透明按钮和单窗体模块化实现12.C#Winform设计的通用标签设计器13.C#Winform使用mysql作为本地数据库14.C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果15.我在winform项目里使用“Windows I/O完成端口”的经验分享16.一次人脸识别ViewFaceCore使用的经验分享,看我把门店淘汰下来的POS机改成了人脸考勤机缘起
很久以前给datagridview绑定列的时候都是手动的,记得以前用Display自定义属性来动态给datagridview绑定列。后来发现不行,于是还在博问发了问题:
后来热心网友帮我回答了这个问题,一试还真可以。再次记录一下。
测试流程:
1) View Entity:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /// <summary> /// IPC完工成品情况查询实体 /// </summary> public class GdvSourceProductRpt { [DisplayName( "客户名称" )] public string custerName { get ; set ; } [DisplayName( "成品订单号" )] public string orderNo { get ; set ; } [DisplayName( "产品名称" )] public string InvName { get ; set ; } [DisplayName( "制令" )] public string mo_code { get ; set ; } [DisplayName( "物料号" )] public string goods_code { get ; set ; } [DisplayName( "订单量" )] public int order_count { get ; set ; } [DisplayName( "制令数" )] public int mo_count { get ; set ; } [DisplayName( "成品产量" )] public int scanNum { get ; set ; } [ProgressBarCell(Style = 1)] [DisplayName( "完成度" )] public double rate { get ; set ; } } |
2)DataGridView的DataSource设置为窗体里的 BindingSource,DataGridView自动完成中文列名的显示
这个是手工操作按下不表
3)实现动态绑定列,实现多个数据源在一个DataGridView里显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | /// <summary> /// 动态绑定DataGridView的列 /// </summary> /// <param name="t"></param> /// <param name="dgv"></param> protected virtual void BingGridColumn(Type t,DataGridView dgv) { dgv.Columns.Clear(); var props = t.GetProperties().Where(prop => prop.GetCustomAttributes( typeof (DisplayNameAttribute), false ).Any()); int col_width = dgv.Width / props.Count() - 8; foreach ( var prop in props) { DisplayNameAttribute attrib = (DisplayNameAttribute)prop.GetCustomAttributes( typeof (DisplayNameAttribute), false ).FirstOrDefault(); if (prop.GetCustomAttributes( typeof (ProgressBarCellAttribute), false ).Any()) { DataGridViewProgressBarColumn dc = new DataGridViewProgressBarColumn(); dc.Name = "col" + prop.Name; dc.HeaderText = attrib.DisplayName; dc.DataPropertyName = prop.Name; dc.Width = col_width; dgv.Columns.Add(dc); } else { DataGridViewTextBoxColumn dc = new DataGridViewTextBoxColumn(); dc.Name = "col" + prop.Name; dc.HeaderText = attrib.DisplayName; dc.DataPropertyName = prop.Name; dc.Width = col_width; dgv.Columns.Add(dc); } } } |
使用:
效果:
顺便贴一下代码,如何实现DataGridView进度条列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public class DataGridViewProgressBarCell : DataGridViewCell { public DataGridViewProgressBarCell() { this .ValueType = typeof ( decimal ); } //设置进度条的背景色; public DataGridViewProgressBarCell(Color progressBarColor) : base () { ProgressBarColor = progressBarColor; } protected Color ProgressBarColor = Color.Green; //进度条的默认背景颜色,绿色; protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { using (SolidBrush backBrush = new SolidBrush(cellStyle.BackColor)) { graphics.FillRectangle(backBrush, cellBounds); } base .PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle); using (SolidBrush brush = new SolidBrush(ProgressBarColor)) { if (value == null ) value = 0; decimal num = System.Convert.ToDecimal(value); float percent = ( float )(num / System.Convert.ToDecimal(100)); graphics.FillRectangle(brush, cellBounds.X, cellBounds.Y + 1, cellBounds.Width * percent, cellBounds.Height - 3); string text = string .Format( "{0}%" , num); SizeF rf = graphics.MeasureString(text, cellStyle.Font); float x = cellBounds.X + (cellBounds.Width - rf.Width) / 2f; float y = cellBounds.Y + (cellBounds.Height - rf.Height) / 2f; Color txtColor = Color.Lime; if (System.Convert.ToDecimal(value) < 10) txtColor = Color.OrangeRed; if (System.Convert.ToDecimal(value) < 50 && System.Convert.ToDecimal(value) > 20) txtColor = Color.DarkBlue; graphics.DrawString(text, cellStyle.Font, new SolidBrush(txtColor), x, y); } } } |
1 2 3 4 5 6 7 8 | public class DataGridViewProgressBarColumn : DataGridViewColumn { public DataGridViewProgressBarColumn() : base ( new DataGridViewProgressBarCell()) { CellTemplate = new DataGridViewProgressBarCell(); } } |
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/datacool2018720.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?