using System;
using System.Windows.Forms;
using System.Drawing;
namespace WindowsApplication1
{
/// <summary>
/// DataGridFormat 的摘要说明。
/// </summary>
///
public delegate void FormatCellEventHandler(object sender,DataGridFormatCellEventArgs handler);
public class DataGridFormatCellEventArgs : EventArgs
{
private int _row;
private int _col;
private Font _font;
private Brush _backbrush;
private Brush _forebrush;
private bool _userBaseClassDrawing;
private string _str;
public DataGridFormatCellEventArgs(int row,int col,Font font,Brush backbrush,Brush forebrush)
{
_row=row;
_col=col;
_font=font;
_backbrush=backbrush;
_forebrush=forebrush;
_userBaseClassDrawing=false;
_str="";
}
public string GetString
{
get {return _str;}
set {_str=value;}
}
public int Column
{
get {return _col;}
set {_col=value;}
}
public int Row
{
get{return _row;}
set{_row=value;}
}
public Font TextFont
{
get{return _font;}
set{_font=value;}
}
public Brush BackBrush
{
get{return _backbrush;}
set{_backbrush=value;}
}
public Brush ForeBrush
{
get{return _forebrush;}
set{_forebrush=value;}
}
public bool UserBaseClassDrawing
{
get{return _userBaseClassDrawing;}
set{_userBaseClassDrawing=value;}
}
}
public class DataGridFormatableTextBoxColumn : DataGridTextBoxColumn
{
public event FormatCellEventHandler SetCellFormat;
private int _col;
public DataGridFormatableTextBoxColumn(int col)
{
_col=col;
}
protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
{
DataGridFormatCellEventArgs e=new DataGridFormatCellEventArgs(rowNum,this._col,this.DataGridTableStyle.DataGrid.Font,
backBrush,foreBrush);
// if (irow!=rowNum)
// {
// irow=rowNum;
// strTemp=this.GetColumnValueAtRow(source,irow).ToString().Trim();
// }
// e.GetString=strTemp;
if (SetCellFormat != null)
{
SetCellFormat(this,e);
}
if (e.UserBaseClassDrawing)
{
base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
else
{
g.FillRectangle(e.BackBrush,bounds);
g.DrawString(this.GetColumnValueAtRow(source,rowNum).ToString(),e.TextFont,e.ForeBrush,bounds.X,bounds.Y);
// MessageBox.Show(this.GetColumnValueAtRow(source,rowNum).ToString());
}
if (e.TextFont!=this.DataGridTableStyle.DataGrid.Font)
{
e.TextFont.Dispose();
}
}
protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
//comment to make cells unable to become editable
base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
}
}
}