//自定义控件继承DataGridView
using System;
using System.Collections.Generic;using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace menu
{
public partial class MyDataGridView : DataGridView
{
public MyDataGridView()
{
InitializeComponent();
}
private string keyWord;
private Color keyColor = Color.Red;
public string KeyWord
{
get { return keyWord; }
set { keyWord = value; }
}
public Color KeyColor
{
get { return keyColor; }
set { keyColor = value; }
}
protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
base.OnCellPainting(e);
if (e.Value != null && !string.IsNullOrEmpty(keyWord) && e.Value.ToString().Contains(keyWord))
{
string cellValue = e.Value.ToString();
Rectangle cellRect = e.CellBounds;
Rectangle keyRect = e.CellBounds;
float fontSizeWidth = 96 / (72 / e.CellStyle.Font.Size);
float fontSizeHeight = 96 / (72 / e.CellStyle.Font.Size);
string perKeyValue = cellValue.Substring(0, cellValue.IndexOf(keyWord));
int length = perKeyValue.Length;//关键字前的字符个数
int length2 = 2 * length - Encoding.Default.GetByteCount(perKeyValue);
if (length2 == 0)
keyRect.X += cellValue.Substring(0, cellValue.IndexOf(keyWord)).Length * (int)fontSizeWidth;
else
keyRect.X += cellValue.Substring(0, cellValue.IndexOf(keyWord)).Length * (int)fontSizeWidth - (length2 * (int)fontSizeWidth)/2;
keyRect.Y += (e.CellBounds.Height - (int)fontSizeHeight) / 2;
cellRect.Y = keyRect.Y;
Brush foreBrush = new SolidBrush(e.CellStyle.ForeColor);
Brush keyBrush = new SolidBrush(this.keyColor);
e.PaintBackground(e.ClipBounds, false);
if (e.State == (DataGridViewElementStates.Displayed | DataGridViewElementStates.Selected | DataGridViewElementStates.Visible))
{
e.PaintBackground(e.ClipBounds, true);
}
e.Graphics.DrawString(cellValue, this.Font, foreBrush, cellRect, StringFormat.GenericDefault);
e.Graphics.DrawString(keyWord, this.Font, keyBrush, keyRect, StringFormat.GenericDefault);
e.Handled = true;
}
}
}
}