datagridview:DataGridView加载自定义ColumnType类型来源: 发布时间:星期一, 2008年10月20日 浏览:470次 评论:0
最近在做项目使用DataGridView控件时,想在编辑单元格时实现这样一个功能:编辑单元格是能显示textbox及一个按钮控件,既可以在textbox里编辑数据,也可以单button按钮弹出一个编辑器窗体来编辑字符串。由于DataGridView没有提供该类型的ColumnType,所以决定自定义一个。
自定义ColumnType需要分别从三个类中派生:IDataGridViewEditingControl,DataGridViewTextBoxCell,DataGridViewColumn。1、自定义一个控件实现IDataGridViewEditingControl接口。2、从DataGridViewTextBoxCell派一个类来调用刚才自定义的编辑控件。3、从DataGridViewColumn派生一个类来实现ColumnType,使之能够在DataGridView加载该类型列。 实现代码如下: 1、DataGridViewTextBoxButtonEditingControl.cs文件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace System.Windows.Forms { public partial class DataGridViewTextBoxButtonEditingControl : UserControl,IDataGridViewEditingControl { private static readonly DataGridViewContentAlignment anyCenter; private static readonly DataGridViewContentAlignment anyRight; private static readonly DataGridViewContentAlignment anyTop; private DataGridView dataGridView; private int rowIndex; private bool valueChanged; private bool repositionOnValueChanged; public DataGridViewTextBoxButtonEditingControl() { InitializeComponent(); } #region Implement the IDataGridViewEditingControl's Method and Property /// <summary> /// Implements the IDataGridViewEditingControl.EditingControlDataGridView property /// </summary> public DataGridView EditingControlDataGridView { get { return dataGridView; } set { dataGridView = value; } } /// <summary> /// Implements the IDataGridViewEditingControl.EditingControlFormattedValue.Property /// </summary> public object EditingControlFormattedValue { get { return Value; } set { this.Value = (string)value; } } /// <summary> /// Implement the IDataGridViewEditingControl.EditingCotrolRowIndex /// </summary> public int EditingControlRowIndex { get { return this.rowIndex; } set { this.rowIndex = value; } } /// <summary> /// Implement the IDataGridViewEditingControl.EditingControlValueChanged /// </summary> public bool EditingControlValueChanged { get { return this.valueChanged; } set { this.valueChanged = value; } } /// <summary> /// Implement the IDataGridViewEditingControl.EditingPanelCursor /// </summary> public Cursor EditingPanelCursor { get { return Cursors.Default; } } /// <summary> /// Implement the IDataGridViewEditingControl.RepositionEditingControlOnValueChange /// </summary> public bool RepositionEditingControlOnValueChange { get { return this.repositionOnValueChanged; } } /// <summary> /// Implement the IDataGridViewEditingControl.ApplyCellStyleToEditingControl /// </summary> /// <param name="dataGridViewCellStyle"></param> public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) { this.txtEdit.Font = dataGridViewCellStyle.Font; if (dataGridViewCellStyle.BackColor.A < 0xff) { Color color = Color.FromArgb(0xff, dataGridViewCellStyle.BackColor); this.txtEdit.BackColor = color; this.dataGridView.EditingPanel.BackColor = color; } else { this.txtEdit.BackColor = dataGridViewCellStyle.BackColor; } this.txtEdit.ForeColor = dataGridViewCellStyle.ForeColor; if (dataGridViewCellStyle.WrapMode == DataGridViewTriState.True) { this.txtEdit.WordWrap = true; } this.repositionOnValueChanged = (dataGridViewCellStyle.WrapMode == DataGridViewTriState.True) && ((dataGridViewCellStyle.Alignment & anyTop) == DataGridViewContentAlignment.NotSet); } /// <summary> /// Implement the IDataGridViewEditingControl.EditingControlWantsInputKey 0
相关文章
读者评论
发表评论 |