GridControl
[ToolboxItem(true)] public partial class UserGridControl : GridControl { public new BaseView MainView { get { return base.MainView; } set { var gridView = value as GridView; if (gridView == null) return; gridView.TopRowChanged += OnTopRowChanged; gridView.CustomDrawRowIndicator += gridView_CustomDrawRowIndicator; base.MainView = gridView; } } public override BaseView CreateView(string name) { var baseView = base.CreateView(name); if (!(baseView is GridView)) return baseView; var gridView = baseView as GridView; InitView(gridView); return gridView; } public void InitView(GridView gridView) { gridView.Appearance.FocusedRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); gridView.Appearance.FocusedRow.Options.UseBackColor = true; gridView.Appearance.HideSelectionRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); gridView.Appearance.HideSelectionRow.Options.UseBackColor = true; gridView.Appearance.SelectedRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); gridView.Appearance.SelectedRow.Options.UseBackColor = true; gridView.OptionsBehavior.ReadOnly = true; gridView.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.MouseDownFocused; gridView.OptionsDetail.EnableMasterViewMode = false; gridView.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect; gridView.OptionsSelection.EnableAppearanceFocusedCell = false; //gridView.OptionsSelection.MultiSelect = true; gridView.OptionsView.ShowAutoFilterRow = true; gridView.OptionsView.ShowGroupPanel = false; gridView.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; gridView.OptionsPrint.AutoWidth = false; gridView.IndicatorWidth = 30; gridView.TopRowChanged += OnTopRowChanged; gridView.CustomDrawRowIndicator += gridView_CustomDrawRowIndicator; } public void BestColunm(GridView gridView, bool bestColumn) { gridView.OptionsView.ColumnAutoWidth = !bestColumn; gridView.BestFitColumns(); } private void gridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e) { var gridView = (GridView)sender; if (!e.Info.IsRowIndicator || e.RowHandle < 0) return; e.Info.DisplayText = (e.RowHandle + 1).ToString(); e.Info.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; } private void OnTopRowChanged(object sender, EventArgs e) { GridView view = sender as GridView; if (view == null) return; int width = CalcIndicatorBestWidth(view); if ((view.IndicatorWidth - 4 < width || view.IndicatorWidth + 4 > width) && view.IndicatorWidth != width) { if (width < 30) width = 30; view.IndicatorWidth = width; } } /// <summary> /// 计算行头宽度 /// </summary> /// <param name="sender"></param> /// <returns></returns> private int CalcIndicatorBestWidth(DevExpress.XtraGrid.Views.Grid.GridView view) { Graphics graphics = new Control().CreateGraphics(); SizeF sizeF = new SizeF(); int count = view.TopRowIndex + ((DevExpress.XtraGrid.Views.Grid.ViewInfo.GridViewInfo)view.GetViewInfo()).RowsInfo.Count; if (count == 0) { count = 30; } sizeF = graphics.MeasureString(count.ToString(), view.Appearance.Row.Font); return Convert.ToInt32(sizeF.Width) + 20; } }