|
GridControl在不同版本(目前使用14.1.8)提供了多种不同的视图,它不仅比DataGridView强大,而且在数据加载性能各方面也有了很大的提升。
在此对之前的研究做一份整理记录,以备后用。
------------------------------ 强大的分割线 ------------------------------
表格控件:GridView相当于DataGridView效果,算是GridControl最常使用到的视图。
以下分实现功能进行总结:
1. 添加CheckBox到行头处
-
gridView1.OptionsSelection.CheckBoxSelectorColumnWidth = 40;
-
gridView1.OptionsSelection.MultiSelect = true;
-
gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
-
gridView1.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.True;
效果图:

2.合并行
-
gridView1.OptionsView.AllowCellMerge = true;
效果图:

3.重绘(GridView)标题CheckBox样式
-
private void YnGridView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
-
{
-
if (e.Column != null && e.Column.Name == "DX$CheckboxSelectorColumn" && this.OptionsSelection.ShowCheckBoxSelectorInColumnHeader != DefaultBoolean.False)
-
{
-
bool value = (this.SelectedRowsCount == this.DataRowCount);
-
RepositoryItemCheckEdit repositoryCheck = null;
-
if (e.Column.RealColumnEdit == null)
-
{
-
repositoryCheck = new RepositoryItemCheckEdit();
-
}
-
else
-
{
-
repositoryCheck = e.Column.RealColumnEdit as RepositoryItemCheckEdit;
-
}
-
-
e.Info.InnerElements.Clear();
-
e.Painter.DrawObject(e.Info);
-
DrawCheckBox(repositoryCheck, e.Graphics, e.Bounds, value);
-
e.Handled = true;
-
}
-
}
-
protected void DrawCheckBox(RepositoryItemCheckEdit edit, Graphics g, Rectangle r, bool value)
-
{
-
DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info;
-
DevExpress.XtraEditors.Drawing.CheckEditPainter painter;
-
DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args;
-
info = edit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;
-
painter = edit.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter;
-
info.EditValue = value;
-
info.Bounds = r;
-
info.CalcViewInfo(g);
-
args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
-
painter.Draw(args);
-
args.Cache.Dispose();
-
}
4.添加(GridView)无数据水印
-
protected override void RaiseCustomDrawEmptyForeground(CustomDrawEventArgs e)
-
{
-
if (this.RowCount == 0 && !e.Handled)
-
{
-
Image img = Properties.Resources.水印_无数据;
-
RectangleF actualRectF;
-
int actualHeight = e.Bounds.Height - 26;
-
if (e.Bounds.Width < img.Width || actualHeight < img.Height)
-
{
-
-
float factor1 = e.Bounds.Width * 1f / img.Width;
-
float factor2 = actualHeight * 1f / img.Height;
-
float factor = Math.Min(factor1, factor2);
-
float x = (e.Bounds.Width - img.Width * factor) / 2;
-
float y = (e.Bounds.Height - img.Height * factor) + 26 / 2;
-
actualRectF = new RectangleF(x, y, img.Width * factor, img.Height * factor);
-
}
-
else
-
{
-
actualRectF = new RectangleF((e.Bounds.Width - img.Width) / 2f, (actualHeight - img.Height) / 2f + 26, img.Width, img.Height);
-
}
-
e.Graphics.DrawImage(img, actualRectF);
-
e.Handled = true;
-
}
-
base.RaiseCustomDrawEmptyForeground(e);
-
}
效果图:

5. 重绘(GridView)选中行与悬停行
-
private int hotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;
-
public int HotTrackRow
-
{
-
get
-
{
-
return hotTrackRow;
-
}
-
set
-
{
-
if (hotTrackRow != value)
-
{
-
int prevHotTrackRow = hotTrackRow;
-
hotTrackRow = value;
-
if (this.ActiveEditor != null)
-
{
-
this.PostEditor();
-
}
-
-
this.RefreshRow(prevHotTrackRow);
-
this.RefreshRow(hotTrackRow);
-
-
if (hotTrackRow >= 0)
-
{
-
GridControl.Cursor = Cursors.Hand;
-
}
-
else
-
{
-
GridControl.Cursor = Cursors.Default;
-
}
-
}
-
}
-
}
-
private void YnGridView_MouseMove(object sender, MouseEventArgs e)
-
{
-
GridHitInfo info = this.CalcHitInfo(new Point(e.X, e.Y));
-
-
if (info.InRowCell)
-
{
-
HotTrackRow = info.RowHandle;
-
}
-
else
-
{
-
HotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;
-
}
-
}
-
private void YnGridView_MouseLeave(object sender, EventArgs e)
-
{
-
HotTrackRow = DevExpress.XtraGrid.GridControl.InvalidRowHandle;
-
}
-
protected override DevExpress.Utils.AppearanceObject GetRowCellStyle(int rowHandle, GridColumn column, GridRowCellState state, AppearanceObject appearance)
-
{
-
if (rowHandle == HotTrackRow)
-
{
-
appearance.BackColor = SkinManager.CurrentSkin.GridViewBorderStyle.HoverRowBackColor;
-
appearance.ForeColor = SkinManager.CurrentSkin.GridViewBorderStyle.HoverRowForeColor;
-
}
-
else if (rowHandle == this.FocusedRowHandle || this.IsRowSelected(rowHandle))
-
{
-
appearance.BackColor = SkinManager.CurrentSkin.GridViewBorderStyle.SelectedRowBackColor;
-
appearance.ForeColor = SkinManager.CurrentSkin.GridViewBorderStyle.HoverRowForeColor;
-
}
-
-
return base.GetRowCellStyle(rowHandle, column, state, appearance);
-
}
效果图:

另外还可参考:GridControl常见用法 |