专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » datagridview:DataGridView加载自定义ColumnType类型 »正文

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条 分0页

发表评论

  • 昵称:
  • 内容: