分享Winform datagridview 動態產生中文HeaderText

來源:互聯網
上載者:User

標籤:alt   textbox   error   cte   ted   any   ipc   temp   color   

緣起

很久以前給datagridview繫結資料行的時候都是手動的,記得以前用Display自訂屬性來動態給datagridview繫結資料行。後來發現不行,於是還在博問發了問題:

後來熱心網友幫我回答了這個問題,一試還真可以。再次記錄一下。

測試流程:

1) View Entity:

 /// <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裡顯示

 /// <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進度條列。

 

 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);            }        }    } 

 

 public class DataGridViewProgressBarColumn : DataGridViewColumn    {        public DataGridViewProgressBarColumn()            : base(new DataGridViewProgressBarCell())        {            CellTemplate = new DataGridViewProgressBarCell();        }    }

 

分享Winform datagridview 動態產生中文HeaderText

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.