一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - DataGridView帶圖標的單元格實現代碼

DataGridView帶圖標的單元格實現代碼

2022-01-19 11:26云夢鴻 C#

這篇文章主要為大家詳細介紹了DataGridView帶圖標的單元格的實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

目的:

DataGridView帶圖標的單元格實現代碼

擴展 c# winform 自帶的表格控件,使其可以自動判斷數據的上下界限值,并標識溢出。

這里使用的方法是:擴展 表格的列 對象:datagridviewcolumn。

1.創建類:decimalcheckcell

?
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/// <summary>
/// 可進行范圍檢查的 數值單元格
/// </summary>
public class decimalcheckcell : 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()
{
 decimalcheckcell c = base.clone() as decimalcheckcell;
 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 content
 base.paint(graphics, clipbounds, cellbounds, rowindex, cellstate,
 value, formattedvalue, errortext, cellstyle,
 advancedborderstyle, paintparts);
 
 // 上下界限溢出判斷
 if (this.rowindex < 0 || this.owningrow.isnewrow) // 行序號不為-1,且不是新記錄行(貌似沒用)
 return;
 if (value == null) 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; // 圖片來自 添加的資源文件
 }
 
 // 將圖片繪制在 數值文本后面
 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); // 篩選非數字
  base.errortext = string.empty;
 }
 catch (exception ex)
 {
  base.errortext = "輸入錯誤" + ex.message;
  return false;
 }
 }
 return base.setvalue(rowindex, value);
}
 
 
}

2.創建類:decimalcheckcolumn

 

?
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/// <summary>
/// 可進行范圍檢查的 數值列
/// </summary>
public class decimalcheckcolumn : 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 decimalcheckcell).maxvalue = value;
  }
 }
 
 public decimal minvalue
 {
  get { return minvalue; }
  set
  {
   minvalue = value;
   (base.celltemplate as decimalcheckcell).minvalue = value;
  }
 }
 
 /// <summary>
 /// 是否對值上界限進行檢查,與maxvalue配合使用
 /// </summary>
 public bool checkmaxvalue
 {
  get { return checkmaxvalue; }
  set
  {
   checkmaxvalue = value;
   (base.celltemplate as decimalcheckcell).checkmaxvalue = value;
  }
 }
 /// <summary>
 /// 是否對值下界限進行檢查,與minvalue配合使用
 /// </summary>
 public bool checkminvalue
 {
  get { return checkminvalue; }
  set
  {
   checkminvalue = value;
   (base.celltemplate as decimalcheckcell).checkminvalue = value;
  }
 }
 
 public decimalcheckcolumn()
  : base(new decimalcheckcell())
 {
  
 }
 
 public override object clone()
 {
  decimalcheckcolumn c = base.clone() as decimalcheckcolumn;
  c.checkmaxvalue = this.checkmaxvalue;
  c.checkminvalue = this.checkminvalue;
  c.maxvalue = this.maxvalue;
  c.minvalue = this.minvalue;
 
  return c;
 }
 
}

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private void testform_load(object sender, eventargs e)
 {
  initcontrolsproperties(); // 初始化
 
  // 綁定數據
  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++) // 隨機10個數
  {
   var vdr = dtabel.newrow();
   vdr[0] = i + 1;
   vdr[1] = rnd.next(50);
   dtabel.rows.add(vdr);
  }
  this.datagridview1.datasource = dtabel;
 }
 
 private void initcontrolsproperties()
 {
  decimalcheckcolumn columnroleid = new decimalcheckcolumn();
  columnroleid.datapropertyname = "id";
  columnroleid.defaultcellstyle.alignment = datagridviewcontentalignment.middleleft;
  columnroleid.name = "id";
  columnroleid.headertext = "序號";
  columnroleid.width = 50;
  this.datagridview1.columns.add(columnroleid);
 
  decimalcheckcolumn columnrolename = new decimalcheckcolumn();
  columnrolename.datapropertyname = "testvalue";
  columnrolename.defaultcellstyle.alignment = datagridviewcontentalignment.middleleft;
  columnrolename.name = "testvalue";
  columnrolename.headertext = "測試數據";
  columnrolename.width = 100;
 
  columnrolename.checkmaxvalue = true; // 進行最大值檢查
  columnrolename.maxvalue = 41;
  columnrolename.checkminvalue = true; // 進行最小值檢查
  columnrolename.minvalue = 7;
 
  this.datagridview1.columns.add(columnrolename);
 
  //this.datagridview1.allowusertoaddrows = false;
  //this.datagridview1.allowusertodeleterows = false;
  //this.datagridview1.readonly = true;
  this.datagridview1.autogeneratecolumns = false;
 
 }

運行效果如下圖左所示

DataGridView帶圖標的單元格實現代碼

DataGridView帶圖標的單元格實現代碼

 那右邊圖是什么鬼?

現在還有一個問題沒有解決:默認第一次加載出來的數據,并不能完全判斷出是否超界限,有時會有一兩個能判斷,有時完全不能判斷,但只需要用鼠標去點擊各單元格,它又可以自動識別。暫時沒有發現問題原因所在。

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/CUIT-DX037/archive/2017/08/13/7354057.html

延伸 · 閱讀

精彩推薦
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
主站蜘蛛池模板: 夫妇野外交换激情 | 国产欧美va欧美va香蕉在线观看 | 色99视频 | 日韩毛片高清在线看 | ass巨大胖女人sias | 国产免费小视频在线观看 | 女人全身裸露无遮挡免费观看 | 国产欧美二区三区 | 免费国产成人高清视频网站 | 亚洲春色综合另类网蜜桃 | 高跟翘臀老师后进式视频 | 国产99久久久国产精品成人 | 香蕉在线精品一区二区 | 精品日本三级在线观看视频 | 美女福利视频一区二区 | 欧美日韩一区二区综合在线视频 | 2021年国内自拍 | 日本一区二区三区久久精品 | 久久伊人中文字幕有码 | 午夜亚洲精品久久久久久 | 欧美老人与小伙子性生交 | 欧美男同猛男 videos 同性 | 日韩一区二区三区精品 | 午夜久久久久久亚洲国产精品 | 国产成人精品一区 | 好紧好爽再叫浪一点点潘金莲 | 公交车上插入 | 91精品国产91久久久久久 | 欧美一级h | 果冻传媒在线播放观看w | 亚洲男人网| 国产福利在线观看永久视频 | 国内精品久久久久影院男同志 | 污到湿的爽文免费阅读 | 亚洲 欧美 中文 日韩 另类 | 国产成人精品高清在线 | 日本伦理动漫在线观看 | 欧美区在线 | 国产成人精品在线观看 | 欧美日韩久久中文字幕 | 扒开老师挠尿口到崩溃刑罚 |