国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#如何在DataGridViewCell中自定義腳本編輯器

2019-11-14 13:40:30
字體:
供稿:網(wǎng)友

    上一篇博文探討了如何自定義DataGridViewColumn實(shí)現(xiàn)一個(gè)TreeViewColumn來在DataGridView控件中顯示TreeView控件,其實(shí)我們還可以繼續(xù)發(fā)揮想象,自定義其他的列類型,下面介紹一個(gè)腳本編輯器列類型,我這里取名ScriptTextEditorColumn,當(dāng)用戶單擊DataGridView的ScriptTextEditorColumn時(shí),單元格右邊會(huì)出現(xiàn)一個(gè)按鈕,單擊按鈕會(huì)彈出一個(gè)腳本編輯器窗體,用戶可以在窗體中進(jìn)行代碼維護(hù),然后回寫到單元格中。

  用人會(huì)問,這個(gè)控件有啥實(shí)際作用,其實(shí)結(jié)合動(dòng)態(tài)編譯的技術(shù),在datagridview中進(jìn)行取值公式的模板設(shè)定,也就是在對(duì)應(yīng)的單元格中設(shè)置C#腳本,然后動(dòng)態(tài)執(zhí)行后呈現(xiàn)結(jié)果到一個(gè)datagridview單元格中,這樣就實(shí)現(xiàn)了動(dòng)態(tài)配置datagridview后臺(tái)計(jì)算邏輯的目的,當(dāng)然實(shí)現(xiàn)這樣的功能還需要大量的工作,但是主要的思路就是這樣。

1 ScriptTextEditorColumn

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Windows.Forms;  6   7 namespace Host_Controls_in_Windows_Forms_DataGridView_Cells  8 {  9    public class ScriptTextEditorColumn : DataGridViewColumn 10     { 11        public ScriptTextEditorColumn() 12            : base(new ScriptTextEditorCell()) 13         { 14         } 15  16         public override DataGridViewCell CellTemplate 17         { 18             get 19             { 20                 return base.CellTemplate; 21             } 22             set 23             { 24                 // Ensure that the cell used for the template is a ScriptTextEditorCell. 25                 if (value != null && 26                     !value.GetType().IsAssignableFrom(typeof(ScriptTextEditorCell))) 27                 { 28                     throw new InvalidCastException("Must be a ScriptTextEditorCell"); 29                 } 30                 base.CellTemplate = value; 31             } 32         } 33     } 34  35     //---------------------------------------------------------------------- 36     public class  ScriptTextEditorCell : DataGridViewTextBoxCell 37     { 38  39         public ScriptTextEditorCell() 40             : base() 41         { 42             43         } 44  45         public override void InitializeEditingControl(int rowIndex, object 46             initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) 47         { 48             // Set the value of the editing control to the current cell value. 49             base.InitializeEditingControl(rowIndex, initialFormattedValue, 50                 dataGridViewCellStyle); 51             ScriptTextEditingControl ctl = 52                 DataGridView.EditingControl as ScriptTextEditingControl; 53             // Use the default row value when Value PRoperty is null. 54             if (this.Value == null) 55             { 56                 ctl.textBox1.Text = (String)this.DefaultNewRowValue; 57             } 58             else 59             { 60                 ctl.textBox1.Text = (String)this.Value; 61             } 62         } 63  64         public override Type EditType 65         { 66             get 67             { 68                 // Return the type of the editing control that CalendarCell uses. 69                 return typeof(ScriptTextEditingControl); 70             } 71         } 72  73         public override Type ValueType 74         { 75             get 76             { 77                 // Return the type of the value that CalendarCell contains. 78  79                 return typeof(String); 80             } 81         } 82  83         public override object DefaultNewRowValue 84         { 85             get 86             { 87                 // Use the current date and time as the default value. 88                 string code = @" 89 #region 90 //jackwangcumt 91 #endregion 92 using System; 93 using System.Collections.Generic; 94 using System.ComponentModel; 95 using System.Drawing; 96 using System.Data; 97 using System.Linq; 98 using System.Text; 99 using System.Windows.Forms;100 namespace Host_Controls_in_Windows_Forms_DataGridView_Cells101 {102     public partial class SourceTextBox : UserControl103     {104         public SourceTextBox()105         {106             InitializeComponent();107             this.textBox1.Location = this.Location;108             this.textBox1.Width = this.Width;109             this.textBox1.Height = this.Height;110         }111         protected void OnValueChanged(string text)112         {113             this.textBox1.Text = text;114         }115 116         private void btnSource_Click(object sender, EventArgs e)117         {118             ScriptEditor frm = new ScriptEditor(this.textBox1.Text);119             frm.ShowDialog();120             this.textBox1.Text = frm.fastColoredTextBox1.Text;121         }122     }123 }124                 ";125                 return code;126             }127         }128     }129     //-----------------------------------------------------------------130 131     class ScriptTextEditingControl : SourceTextBox, IDataGridViewEditingControl132     {133         DataGridView dataGridView;134         private bool valueChanged = false;135         int rowIndex;136 137         public ScriptTextEditingControl()138         {139             //文本變更更新到cell140             this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);141         }142 143         void textBox1_TextChanged(object sender, EventArgs e)144         {145             // Notify the DataGridView that the contents of the cell146             // have changed.147             valueChanged = true;148             this.EditingControlDataGridView.NotifyCurrentCellDirty(true);149             //調(diào)用SourceTextBox的OnValueChanged(string Text)150             base.OnValueChanged(this.textBox1.Text);151         }152 153         // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 154         // property.155         public object EditingControlFormattedValue156         {157             get158             {159                 return this.textBox1.Text;160             }161             set162             {163                 if (value is String)164                 {165                     try166                     {167                         // This will throw an exception of the string is 168                         // null, empty, or not in the format of a date.169                        this.textBox1.Text=((String)value);170                     }171                     catch172                     {173                         // In the case of an exception, just use the 174                         // default value so we're not left with a null175                         // value.176                         this.textBox1.Text = "jackwangcumt>>error";177                     }178                 }179             }180         }181 182         // Implements the 183         // IDataGridViewEditingControl.GetEditingControlFormattedValue method.184         public object GetEditingControlFormattedValue(185             DataGridViewDataErrorContexts context)186         {187             return EditingControlFormattedValue;188         }189 190         // Implements the 191         // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.192         public void ApplyCellStyleToEditingControl(193             DataGridViewCellStyle dataGridViewCellStyle)194         {195             this.Font = dataGridViewCellStyle.Font;196             //this.CalendarForeColor = dataGridViewCellStyle.ForeColor;197             //this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;198         }199 200         // Implements the IDataGridViewEditingControl.EditingControlRowIndex 201         // property.202         public int EditingControlRowIndex203         {204             get205             {206                 return rowIndex;207             }208             set209             {210                 rowIndex = value;211             }212         }213 214         // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 215         // method.216         public bool EditingControlWantsInputKey(217             Keys key, bool dataGridViewWantsInputKey)218         {219             // Let the DateTimePicker handle the keys listed.220             switch (key & Keys.KeyCode)221             {222                 case Keys.Left:223                 case Keys.Up:224                 case Keys.Down:225                 case Keys.Right:226                 case Keys.Home:227                 case Keys.End:228                 case Keys.PageDown:229                 case Keys.PageUp:230                     return true;231                 default:232                     return !dataGridViewWantsInputKey;233             }234         }235 236         // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 237         // method.238         public void PrepareEditingControlForEdit(bool selectAll)239         {240             // No preparation needs to be done.241         }242 243         // Implements the IDataGridViewEditingControl244         // .RepositionEditingControlOnValueChange property.245         public bool RepositionEditingControlOnValueChange246         {247             get248             {249                 return false;250             }251         }252 253         // Implements the IDataGridViewEditingControl254         // .EditingControlDataGridView property.255         public DataGridView EditingControlDataGridView256         {257             get258             {259                 return dataGridView;260             }261             set262             {263                 dataGridView = value;264             }265         }266 267         // Implements the IDataGridViewEditingControl268         // .EditingControlValueChanged property.269         public bool EditingControlValueChanged270         {271             get272             {273                 return valueChanged;274             }275             set276             {277                 valueChanged = value;278             }279         }280 281         // Implements the IDataGridViewEditingControl282         // .EditingPanelCursor property.283         public Cursor EditingPanelCursor284         {285             get286             {287                 return base.Cursor;288             }289         }290 291         protected override void OnTextChanged(EventArgs e)292         {293             // Notify the DataGridView that the contents of the cell294             // have changed.295             valueChanged = true;296             this.EditingControlDataGridView.NotifyCurrentCellDirty(true);297             base.OnTextChanged(e);298           299         }300    301     }302 303 304 305 }

2 SourceTextBox

 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Drawing; 5 using System.Data; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace Host_Controls_in_Windows_Forms_DataGridView_Cells11 {12     public partial class SourceTextBox : UserControl13     {14         public SourceTextBox()15         {16             InitializeComponent();17             this.textBox1.Location = this.Location;18             this.textBox1.Width = this.Width;19             this.textBox1.Height = this.Height;20         }21         protected void OnValueChanged(string text)22         {23             this.textBox1.Text = text;24         }25 26         private void btnSource_Click(object sender, EventArgs e)27         {28             ScriptEditor frm = new ScriptEditor(this.textBox1.Text);29             frm.ShowDialog();30             this.textBox1.Text = frm.fastColoredTextBox1.Text;31         }32     }33 }
 1 namespace Host_Controls_in_Windows_Forms_DataGridView_Cells 2 { 3     partial class SourceTextBox 4     { 5         /// <summary>  6         /// 必需的設(shè)計(jì)器變量。 7         /// </summary> 8         private System.ComponentModel.IContainer components = null; 9 10         /// <summary> 11         /// 清理所有正在使用的資源。12         /// </summary>13         /// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param>14         protected override void Dispose(bool disposing)15         {16             if (disposing && (components != null))17             {18                 components.Dispose();19             }20             base.Dispose(disposing);21         }22 23         #region 組件設(shè)計(jì)器生成的代碼24 25         /// <summary> 26         /// 設(shè)計(jì)器支持所需的方法 - 不要27         /// 使用代碼編輯器修改此方法的內(nèi)容。28         /// </summary>29         private void InitializeComponent()30         {31             this.textBox1 = new System.Windows.Forms.TextBox();32             this.btnSource = new System.Windows.Forms.Button();33             this.SuspendLayout();34             // 35             // textBox136             // 37             this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;38             this.textBox1.Location = new System.Drawing.Point(3, 3);39             this.textBox1.Margin = new System.Windows.Forms.Padding(4);40             this.textBox1.Multiline = true;41             this.textBox1.Name = "textBox1";42             this.textBox1.Size = new System.Drawing.Size(175, 21);43             this.textBox1.TabIndex = 1;44             // 45             // btnSource46             // 47             this.btnSource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)48                         | System.Windows.Forms.AnchorStyles.Right)));49             this.btnSource.BackColor = System.Drawing.Color.Transparent;50             this.btnSource.BackgroundImage = global::Host_Controls_in_Windows_Forms_DataGridView_Cells.Resource.setting;51             this.btnSource.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;52             this.btnSource.FlatAppearance.BorderColor = System.Drawing.Color.White;53             this.btnSource.FlatAppearance.BorderSize = 0;54             this.btnSource.FlatStyle = System.Windows.Forms.FlatStyle.Flat;55             this.btnSource.Font = new System.Drawing.Font("新宋體", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));56             this.btnSource.Location = new System.Drawing.Point(159, -1);57             this.btnSource.Margin = new System.Windows.Forms.Padding(0);58             this.btnSource.Name = "btnSource";59             this.btnSource.Size = new System.Drawing.Size(19, 25);60             this.btnSource.TabIndex = 0;61             this.btnSource.UseVisualStyleBackColor = false;62             this.btnSource.Click += new System.EventHandler(this.btnSource_Click);63             // 64             // SourceTextBox65             // 66             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);67             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;68             this.Controls.Add(this.btnSource);69             this.Controls.Add(this.textBox1);70             this.Margin = new System.Windows.Forms.Padding(0);71             this.Name = "SourceTextBox";72             this.Size = new System.Drawing.Size(178, 26);73             this.ResumeLayout(false);74             this.PerformLayout();75 76         }77 78         #endregion79 80         public System.Windows.Forms.Button btnSource;81         public System.Windows.Forms.TextBox textBox1;82     }83 }
View Code

3 效果

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金昌市| 海南省| 安岳县| 湖南省| 武汉市| 奎屯市| 通许县| 嫩江县| 潞西市| 射阳县| 马关县| 阜平县| 灵丘县| 宝应县| 九寨沟县| 威宁| 东丽区| 墨江| 尤溪县| 平山县| 余庆县| 红原县| 舒兰市| 新化县| 息烽县| 贺兰县| 莱西市| 静乐县| 河间市| 溧阳市| 临颍县| 肥东县| 通道| 夹江县| 金塔县| 神木县| 五河县| 泸定县| 沿河| 锡林郭勒盟| 淳安县|