日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DataGridView带图标的单元格实现

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DataGridView带图标的单元格实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


目的:

擴(kuò)展 C# WinForm 自帶的表格控件,使其可以自動(dòng)判斷數(shù)據(jù)的上下界限值,并標(biāo)識(shí)溢出。

這里使用的方法是:擴(kuò)展 表格的列 對(duì)象:DataGridViewColumn。

1.創(chuàng)建類:DataGridViewDecimalCheckCell.cs

public class DataGridViewDecimalCheckCell : DataGridViewTextBoxCell{private bool checkMaxValue = false;private bool checkMinValue = false;private decimal maxValue = 0;private decimal minValue = 0;public decimal MaxValue{get { return maxValue; }internal set { maxValue = value; }}public decimal MinValue{get { return minValue; }internal set { minValue = value; }}public bool CheckMaxValue{get { return checkMaxValue; }internal set { checkMaxValue = value; }}public bool CheckMinValue{get { return checkMinValue; }internal set{checkMinValue = value;}}public override object Clone(){DataGridViewDecimalCheckCell c = base.Clone() as DataGridViewDecimalCheckCell;c.checkMaxValue = this.checkMaxValue;c.checkMinValue = this.checkMinValue;c.maxValue = this.maxValue;c.minValue = this.minValue;return c;}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){// Paint the base contentbase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState,value, formattedValue, errorText, cellStyle,advancedBorderStyle, paintParts);// 上下界限溢出判斷if (rowIndex < 0 || this.OwningRow.IsNewRow) // 行序號(hào)不為-1,且不是新記錄行return;if (value == null) return;if (value.GetType() == typeof(DBNull)) return;decimal vCurValue= Convert.ToDecimal(value);bool overValue = false;Image img = null;if (checkMaxValue){overValue = vCurValue > maxValue;img = VsTest.Properties.Resources.Undo;}if (checkMinValue && !overValue){overValue = vCurValue < minValue;img = VsTest.Properties.Resources.Redo;}// 將圖片繪制在 數(shù)值文本后面if (overValue && img != null){var vSize = graphics.MeasureString(vCurValue.ToString(), cellStyle.Font);System.Drawing.Drawing2D.GraphicsContainer container = graphics.BeginContainer();graphics.SetClip(cellBounds);graphics.DrawImageUnscaled(img, new Point(cellBounds.Location.X + (int)vSize.Width, cellBounds.Location.Y));graphics.EndContainer(container);}}protected override bool SetValue(int rowIndex, object value){if (rowIndex >= 0){try{decimal vdeci = Convert.ToDecimal(value); // 篩選非數(shù)字base.ErrorText = string.Empty;}catch (Exception ex){base.ErrorText = "輸入錯(cuò)誤" + ex.Message;return false;}}return base.SetValue(rowIndex, value);}}

2.創(chuàng)建類:DataGridViewDecimalCheckColumn.cs

public class DataGridViewDecimalCheckColumn : DataGridViewColumn{private bool checkMaxValue = false;private bool checkMinValue = false;private decimal maxValue = 0;private decimal minValue = 0;public decimal MaxValue{get { return maxValue; }set{maxValue = value;(base.CellTemplate as DataGridViewDecimalCheckCell).MaxValue = value;}}public decimal MinValue{get { return minValue; }set{minValue = value;(base.CellTemplate as DataGridViewDecimalCheckCell).MinValue = value;}}/// <summary>/// 是否對(duì)值上界限進(jìn)行檢查,與MaxValue配合使用/// </summary>public bool CheckMaxValue{get { return checkMaxValue; }set{checkMaxValue = value;(base.CellTemplate as DataGridViewDecimalCheckCell).CheckMaxValue = value;}}/// <summary>/// 是否對(duì)值下界限進(jìn)行檢查,與MinValue配合使用/// </summary>public bool CheckMinValue{get { return checkMinValue; }set{checkMinValue = value;(base.CellTemplate as DataGridViewDecimalCheckCell).CheckMinValue = value;}}public DataGridViewDecimalCheckColumn(): base(new DataGridViewDecimalCheckCell()){}public override object Clone(){DataGridViewDecimalCheckColumn c = base.Clone() as DataGridViewDecimalCheckColumn;c.checkMaxValue = this.checkMaxValue;c.checkMinValue = this.checkMinValue;c.maxValue = this.maxValue;c.minValue = this.minValue;return c;}}

3.現(xiàn)在就可以使用了,在窗體上拖一個(gè) dataGridView 控件,添加如下代碼:

private void TestForm_Load(object sender, EventArgs e){InitControlsProperties(); // 初始化// 綁定數(shù)據(jù)DataTable dTabel = new DataTable();dTabel.Columns.Add("ID",typeof(int));dTabel.Columns.Add("TestValue",typeof(decimal));Random rnd = new Random();for (int i = 0; i < 10; i++) // 隨機(jī)10個(gè)數(shù) {var vdr = dTabel.NewRow();vdr[0] = i + 1;vdr[1] = rnd.Next(50);dTabel.Rows.Add(vdr);}this.dataGridView1.DataSource = dTabel;}private void InitControlsProperties(){var vColumnID = new DataGridViewDecimalCheckColumn();vColumnID.DataPropertyName = "ID";vColumnID.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;vColumnID.Name = "ID";vColumnID.HeaderText = "序號(hào)";vColumnID.Width = 50;this.dataGridView1.Columns.Add(vColumnID);var vColumnValue = new DataGridViewDecimalCheckColumn();vColumnValue.DataPropertyName = "TestValue";vColumnValue.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;vColumnValue.Name = "TestValue";vColumnValue.HeaderText = "測(cè)試數(shù)據(jù)";vColumnValue.Width = 100;vColumnValue.CheckMaxValue = true; // 進(jìn)行最大值檢查vColumnValue.MaxValue = 41;vColumnValue.CheckMinValue = true; // 進(jìn)行最小值檢查vColumnValue.MinValue = 7;this.dataGridView1.Columns.Add(vColumnValue);//this.dataGridView1.AllowUserToAddRows = false;//this.dataGridView1.AllowUserToDeleteRows = false;//this.dataGridView1.ReadOnly = true;this.dataGridView1.AutoGenerateColumns = false;}

效果圖:

?

?[http://www.cnblogs.com/CUIT-DX037/]

?

轉(zhuǎn)載于:https://www.cnblogs.com/CUIT-DX037/p/7354057.html

總結(jié)

以上是生活随笔為你收集整理的DataGridView带图标的单元格实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。