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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

在 Windows 窗体 DataGridView 单元格中承载控件

發布時間:2024/9/20 windows 118 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 Windows 窗体 DataGridView 单元格中承载控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DataGridView?控件提供了多種列類型,使得用戶可以通過多種方式輸入和編輯值。但是,如果這些列類型無法滿足數據輸入要求,您也可以使用承載所選控件的單元格創建自己的列類型。要做到這一點,必須定義派生自DataGridViewColumn?和?DataGridViewCell?的類。您還必須定義派生自?Control?并實現IDataGridViewEditingControl?接口的類。

下面的代碼示例演示如何創建日歷列。此列的單元格在普通的文本框單元格中顯示日期,但當用戶編輯單元格時,就會出現?DateTimePicker?控件。為了避免必須再次實現文本框顯示功能,CalendarCell?類從DataGridViewTextBoxCell?類派生,而不是直接從?DataGridViewCell?類繼承。

說明:

當從?DataGridViewCell?或?DataGridViewColumn?派生并向派生類添加新屬性時,請確保重寫?Clone?方法以便在克隆操作期間復制新屬性。還應調用基類的?Clone?方法,以便將基類的屬性復制到新的單元格或列中。

??示例C#using System; using System.Windows.Forms;public class CalendarColumn : DataGridViewColumn {public CalendarColumn() : base(new CalendarCell()){}public override DataGridViewCell CellTemplate{get{return base.CellTemplate;}set{// Ensure that the cell used for the template is a CalendarCell.if (value != null && !value.GetType().IsAssignableFrom(typeof(CalendarCell))){throw new InvalidCastException("Must be a CalendarCell");}base.CellTemplate = value;}} }public class CalendarCell : DataGridViewTextBoxCell {public CalendarCell(): base(){// Use the short date format.this.Style.Format = "d";}public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle){// Set the value of the editing control to the current cell value.base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);CalendarEditingControl ctl = DataGridView.EditingControl as CalendarEditingControl;ctl.Value = (DateTime)this.Value;}public override Type EditType{get{// Return the type of the editing contol that CalendarCell uses.return typeof(CalendarEditingControl);}}public override Type ValueType{get{// Return the type of the value that CalendarCell contains.return typeof(DateTime);}}public override object DefaultNewRowValue{get{// Use the current date and time as the default value.return DateTime.Now;}} }class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl {DataGridView dataGridView;private bool valueChanged = false;int rowIndex;public CalendarEditingControl(){this.Format = DateTimePickerFormat.Short;}// Implements the IDataGridViewEditingControl.EditingControlFormattedValue // property.public object EditingControlFormattedValue{get{return this.Value.ToShortDateString();}set{if (value is String){this.Value = DateTime.Parse((String)value);}}}// Implements the // IDataGridViewEditingControl.GetEditingControlFormattedValue method.public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context){return EditingControlFormattedValue;}// Implements the // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle){this.Font = dataGridViewCellStyle.Font;this.CalendarForeColor = dataGridViewCellStyle.ForeColor;this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;}// Implements the IDataGridViewEditingControl.EditingControlRowIndex // property.public int EditingControlRowIndex{get{return rowIndex;}set{rowIndex = value;}}// Implements the IDataGridViewEditingControl.EditingControlWantsInputKey // method.public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey){// Let the DateTimePicker handle the keys listed.switch (key & Keys.KeyCode){case Keys.Left:case Keys.Up:case Keys.Down:case Keys.Right:case Keys.Home:case Keys.End:case Keys.PageDown:case Keys.PageUp:return true;default:return !dataGridViewWantsInputKey;}}// Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit // method.public void PrepareEditingControlForEdit(bool selectAll){// No preparation needs to be done.}// Implements the IDataGridViewEditingControl// .RepositionEditingControlOnValueChange property.public bool RepositionEditingControlOnValueChange{get{return false;}}// Implements the IDataGridViewEditingControl// .EditingControlDataGridView property.public DataGridView EditingControlDataGridView{get{return dataGridView;}set{dataGridView = value;}}// Implements the IDataGridViewEditingControl// .EditingControlValueChanged property.public bool EditingControlValueChanged{get{return valueChanged;}set{valueChanged = value;}}// Implements the IDataGridViewEditingControl// .EditingPanelCursor property.public Cursor EditingPanelCursor{get{return base.Cursor;}}protected override void OnValueChanged(EventArgs eventargs){// Notify the DataGridView that the contents of the cell// have changed.valueChanged = true;this.EditingControlDataGridView.NotifyCurrentCellDirty(true);base.OnValueChanged(eventargs);} }public class Form1 : Form {private DataGridView dataGridView1 = new DataGridView();[STAThreadAttribute()]public static void Main(){Application.Run(new Form1());}public Form1(){this.dataGridView1.Dock = DockStyle.Fill;this.Controls.Add(this.dataGridView1);this.Load += new EventHandler(Form1_Load);this.Text = "DataGridView calendar column demo";}private void Form1_Load(object sender, EventArgs e){CalendarColumn col = new CalendarColumn();this.dataGridView1.Columns.Add(col);this.dataGridView1.RowCount = 5;foreach (DataGridViewRow row in this.dataGridView1.Rows){row.Cells[0].Value = DateTime.Now;}} }

總結

以上是生活随笔為你收集整理的在 Windows 窗体 DataGridView 单元格中承载控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。