默认我们的DataGridView cell是没有边框的,无伦是正常状态还是编辑状态,因为系统把TextBox的BorderStyle值改成了None,所以这里首先要把BorderStyle值改回来,那至于是FixedSingle还是Fixed3D,就得看你自己需要了,我这里改成了FixedSingle,方便绘制
主要是继承 DataGridViewTextBoxCell 类,需要在这里改点东西代码如下:
public class DataGridViewTextBoxEditCell : DataGridViewTextBoxCell
{
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
TextBox textBox = this.DataGridView.EditingControl as TextBox;
if (textBox != null)
{
textBox.BorderStyle = BorderStyle.FixedSingle;//改回边框
}
}
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)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
//绘制边框
Rectangle cellBounds1 = new Rectangle(cellBounds.X + 2, cellBounds.Y + 1, cellBounds.Width - 4, cellBounds.Height - 3);
graphics.DrawRectangle(new Pen(SystemColors.WindowFrame), cellBounds1);
}
}
public class DataGridViewTextBoxEditColumn : DataGridViewColumn
{
public DataGridViewTextBoxEditColumn()
: base(new DataGridViewTextBoxEditCell())
{
}
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(DataGridViewTextBoxEditCell)))
{
throw new InvalidCastException("Must be a CalendarCell");
}
base.CellTemplate = value;
}
}
}
应用:
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("name1");
DataGridViewTextBoxEditColumn dataGridViewColumn = new DataGridViewTextBoxEditColumn();
dataGridViewColumn.HeaderText = "columns";
dataGridViewColumn.DataPropertyName = "name";
this.dataGridView1.Columns.Add(dataGridViewColumn);
DataGridViewTextBoxEditColumn dataGridViewColumn1 = new DataGridViewTextBoxEditColumn();
dataGridViewColumn1.HeaderText = "columns";
dataGridViewColumn1.DataPropertyName = "name1";
this.dataGridView1.Columns.Add(dataGridViewColumn1);
this.dataGridView1.AutoGenerateColumns = false;
this.dataGridView1.DataSource = dt;
}
应该还有更多好的办法,希望大家能批评改正
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。