using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraGrid.Views.Grid.Drawing;
namespace CellBorder
{
public class Form1 : System.Windows.Forms.Form {
private DevExpress.XtraGrid.GridControl gridControl1;
private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
private System.ComponentModel.Container components = null;
public Form1() {
InitializeComponent();
}
protected override void Dispose( bool disposing ) {
if( disposing ) {
if (components != null) {
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent() {
this.gridControl1 = new DevExpress.XtraGrid.GridControl();
this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
this.SuspendLayout();
this.gridControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.gridControl1.EmbeddedNavigator.Name = "";
this.gridControl1.Location = new System.Drawing.Point(0, 0);
this.gridControl1.MainView = this.gridView1;
this.gridControl1.Name = "gridControl1";
this.gridControl1.Size = new System.Drawing.Size(476, 293);
this.gridControl1.TabIndex = 0;
this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
this.gridView1});
this.gridView1.GridControl = this.gridControl1;
this.gridView1.Name = "gridView1";
this.gridView1.CustomDrawCell += new
DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventHandler(this.gridView1_CustomDrawCell);
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(476, 293);
this.Controls.Add(this.gridControl1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main() {
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e) {
new DevExpress.XtraGrid.Design.XViewsPrinting(gridControl1);
}
private void gridView1_CustomDrawCell(object sender,
DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) {
GridView view = sender as GridView;
if(e.Column == view.FocusedColumn && e.RowHandle == view.FocusedRowHandle) {
CellDrawHelper.DoDefaultDrawCell(view, e);
CellDrawHelper.DrawCellBorder(e);
e.Handled = true;
}
}
}
public static class CellDrawHelper {
public static void DrawCellBorder(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) {
Brush brush = Brushes.Black;
e.Graphics.FillRectangle(brush, new Rectangle(e.Bounds.X - 1, e.Bounds.Y - 1, e.Bounds.Width
+ 2, 2));
e.Graphics.FillRectangle(brush, new Rectangle(e.Bounds.Right - 1, e.Bounds.Y - 1, 2,
e.Bounds.Height + 2));
e.Graphics.FillRectangle(brush, new Rectangle(e.Bounds.X - 1, e.Bounds.Bottom - 1,
e.Bounds.Width + 2, 2));
e.Graphics.FillRectangle(brush, new Rectangle(e.Bounds.X - 1, e.Bounds.Y - 1, 2,
e.Bounds.Height + 2));
}
public static void DoDefaultDrawCell(GridView view, RowCellCustomDrawEventArgs e) {
PropertyInfo pi;
GridControl grid;
GridViewInfo info;
GridCellInfo cell;
GridEditorContainerHelper helper;
GridViewDrawArgs args;
info = view.GetViewInfo() as GridViewInfo;
cell = e.Cell as GridCellInfo;
grid = view.GridControl;
pi = grid.GetType().GetProperty("EditorHelper", BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.DeclaredOnly);
helper = pi.GetValue(grid, null) as GridEditorContainerHelper;
args = new GridViewDrawArgs(e.Cache, info, e.Bounds);
e.Appearance.FillRectangle(e.Cache, e.Bounds);
helper.DrawCellEdit(args, cell.Editor, cell.ViewInfo, e.Appearance,
cell.CellValueRect.Location);
}
}
}