DisplayFormat 設置顯示格式如:{0:P}表示顯示為百分號模式。如數據源中為0.5。表示出來為50%
2、GridContro總合計及分組合計:
常規總合計直接RunDesigner-Group Summary Items
DisplayFormat 設置顯示格式如:{0:P}表示顯示為百分號模式。如數據源中為0.5。表示出來為50%
FieldName 設置顯示的對應列
ShowInGroupColumnFooter 在那一列下面顯示
SummaryType 合計方式。選擇Custom表示自定義。CustomSummaryCalculate事件可處理
//Footer行自定義列合計 GridView view = sender as GridView; if (e.Item == view.Columns["RateZk"].SummaryItem) { decimal x = Convert.ToDecimal(view.Columns["RetailFAmount"].SummaryItem.SummaryValue); decimal y = Convert.ToDecimal(view.Columns["RetailAmount"].SummaryItem.SummaryValue); view.Columns["RateZk"].SummaryItem.DisplayFormat = "{0:P}"; ) e.TotalValue = x / y; else e.TotalValue = ; }
GridContro導出Excel操作:
SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "導出Excel"; saveFileDialog.Filter = "Excel文件(*.xls)|*.xls"; DialogResult dialogResult = saveFileDialog.ShowDialog(this); if (dialogResult == DialogResult.OK) { this.gvbrowse.OptionsPrint.AutoWidth = false; //設置導出的Excel自動調整列寬,列寬和控件的列寬一致 this.gcbrowse.ExportToXls(saveFileDialog.FileName); //this.gcbrowse.ExportToXlsOld(saveFileDialog.FileName);//這個方法默認會自動調整列寬,但是office10以上版本有的會報錯 DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.gvbrowse.OptionsPrint.AutoWidth = true; }
GridControl列要顯示百分號:
Run Designer-Columns列 FormatType="Numeric" FormatString="p"
自動調整所有字段寬度 this.gridView1.BestFitColumns();
顯示滾動條:gridView1.OptionsView.ColumnAutoWidth屬性是true,即各列的寬度自動調整,你把它設成false,就會出現了。
設置奇、偶行交替顏色
OptionsView.EnableAppearanceEvenRow =
true;
OptionsView.EnableAppearanceOddRow =
true
;
MultiSelect = true; //設置可多選
MultiSelectMode =CellSelect/RowSelect;//多選行還是多選單元格(一般選RowSelect)
//禁用標題行過濾
AllowFilter = false;
//禁用標題行排序
AllowSort = false;
//禁止列移動
AllowColumnMoving = false;
//禁止改變列寬
AllowColumnResizing = false;
FocusRectStyle = None; //取消點擊后的虛線框
下拉框清空
1、清值 comboboxedit2.editvalue=null;
2、清列表 comboboxedit2.properties.items.clear();
GridView 設置選中行的顏色
GridView : Run Designer -> Appearences : selectRow & FocusedRow (兩項都要設置)
BackColor : MediumSlateBlue 背景色
ForeColor : White 前景色 字體顏色
GridView 設置標題行以及內容行 數據居中
標題行 10 所述 在HeadPanel 里有一個TextOptions 展開之后 將HAlignment : Center
如果是將內容行數據居中.有兩種方法 1 : 逐行設置 2 : 設置Appearences
1 : GridView -> Run Designer -> Columns -> AppearanceCell -> TextOptions 找到HAlignment : Center .
2 : GridView -> Run Designer -> Appearance -> ViewCaption -> TextOptions -> HAlignment : Center
GridView 添加 序號 列
GridView : Run Designer -> Event -> CustomDrawRowIndicator
在事件中添加代碼
public static void DrawRowIndicator(this GridView gridView, int width = 40, string headTitle = "行號") { gridView.CustomDrawRowIndicator += (sender, e) => { e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; if (e.Info.Kind == DevExpress.Utils.Drawing.IndicatorKind.Header) { e.Appearance.DrawBackground(e.Cache, e.Bounds); e.Appearance.DrawString(e.Cache, headTitle, e.Bounds); e.Handled = true; } if (e.Info.IsRowIndicator) { if (e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); } else if (e.RowHandle < 0 && e.RowHandle > -1000) { e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite; e.Info.DisplayText = "G" + e.RowHandle.ToString(); } } }; gridView.IndicatorWidth = width != 0 ? width : 40; }
另外在 Run Desginer -> IndicatorWidth 設置序號列的寬度 一般50左右就比較適合一些了.
漢化按鈕提示:
public class ChEditLocalizer : Localizer { // 重載 GetLocalizedString 方法 public override string GetLocalizedString(StringId id) { switch (id) { //Button 按鈕漢化 case StringId.XtraMessageBoxOkButtonText: return "確認"; case StringId.XtraMessageBoxCancelButtonText: return "取消"; case StringId.XtraMessageBoxAbortButtonText: return "退出"; case StringId.XtraMessageBoxRetryButtonText: return "重試"; case StringId.XtraMessageBoxIgnoreButtonText: return "忽略"; case StringId.XtraMessageBoxYesButtonText: return "是"; case StringId.XtraMessageBoxNoButtonText: return "否"; } return base.GetLocalizedString(id); } }
public class XtraGrid_CN : GridLocalizer { public override string GetLocalizedString(GridStringId id) { switch(id) { case GridStringId.ColumnViewExceptionMessage:return "是否進行更正?"; } return base.GetLocalizedString(id); } }
皮膚設置:
DevExpress.UserSkins.OfficeSkins.Register(); //注冊office的皮膚 請先加入引用office的dll文件,關於如何引用 請看下文 DevExpress.UserSkins.BonusSkins.Register(); //注冊BonusSkins的皮膚 if (!DevExpress.Skins.SkinManager.AllowFormSkins) DevExpress.Skins.SkinManager.EnableFormSkins(); DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = "Black"; //默認黑背景
DevExpress實現GridView當無數據行時提示消息 https://ctolib.com/topics-51130.html
/// <summary> /// 設置當沒有數據行的提示信息『CustomDrawEmptyForeground』 /// </summary> /// <param name="gridView">GridView</param> /// <param name="e">CustomDrawEventArgs</param> /// <param name="noRecordMsg">提示信息</param> public static void DrawNoRowCountMessage(this GridView gridView, CustomDrawEventArgs e, string noRecordMsg) { if (gridView == null) throw new ArgumentNullException("gridView"); if (gridView.RowCount == 0) { if (!string.IsNullOrEmpty(noRecordMsg)) { Font _font = new Font("宋體", 10, FontStyle.Bold); Rectangle _r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5); e.Graphics.DrawString(noRecordMsg, _font, Brushes.Black, _r); } } }
代碼使用方法如下:
private void gvLampTotal_CustomDrawEmptyForeground(object sender, DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs e) { gvLampTotal.DrawNoRowCountMessage(e, "暫無符合的數據!"); }
DevExpress實現GridControl列頭繪制Checkbox的方法 https://ctolib.com/topics-51144.html http://aloysians.com/blog/getInfo/52837/1491226375
/// <summary> /// 為列頭繪制CheckBox /// </summary> /// <param name="view">GridView</param> /// <param name="checkItem">RepositoryItemCheckEdit</param> /// <param name="fieldName">需要繪制Checkbox的列名</param> /// <param name="e">ColumnHeaderCustomDrawEventArgs</param> public static void DrawHeaderCheckBox(this GridView view, RepositoryItemCheckEdit checkItem, string fieldName, ColumnHeaderCustomDrawEventArgs e) { /*說明: *參考:https://www.devexpress.com/Support/Center/Question/Details/Q354489 *在CustomDrawColumnHeader中使用 *eg: * private void gvCabChDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) * { * GridView _view = sender as GridView; * _view.DrawHeaderCheckBox(CheckItem, "Check", e); * } */ if (e.Column != null && e.Column.FieldName.Equals(fieldName)) { e.Info.InnerElements.Clear(); e.Painter.DrawObject(e.Info); DrawCheckBox(checkItem, e.Graphics, e.Bounds, getCheckedCount(view, fieldName) == view.DataRowCount); e.Handled = true; } } private static void DrawCheckBox(RepositoryItemCheckEdit checkItem, Graphics g, Rectangle r, bool Checked) { CheckEditViewInfo _info; CheckEditPainter _painter; ControlGraphicsInfoArgs _args; _info = checkItem.CreateViewInfo() as CheckEditViewInfo; _painter = checkItem.CreatePainter() as CheckEditPainter; _info.EditValue = Checked; _info.Bounds = r; _info.PaintAppearance.ForeColor = Color.Black; _info.CalcViewInfo(g); _args = new ControlGraphicsInfoArgs(_info, new DevExpress.Utils.Drawing.GraphicsCache(g), r); _painter.Draw(_args); _args.Cache.Dispose(); } private static int getCheckedCount(GridView view, string filedName) { int count = 0; for (int i = 0; i < view.DataRowCount; i++) { object _cellValue = view.GetRowCellValue(i, view.Columns[filedName]); if (_cellValue == null) continue; if (string.IsNullOrEmpty(_cellValue.ToString().Trim())) continue; bool _checkStatus = false; if (bool.TryParse(_cellValue.ToString(), out _checkStatus)) { if (_checkStatus) count++; } } return count; }
使用方法如下:
RepositoryItemCheckEdit CheckItem = new RepositoryItemCheckEdit(); const string gcCheckFieldName = "Checked"; private void gvLampConfig_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) { GridView _view = sender as GridView; _view.DrawHeaderCheckBox(CheckItem, gcCheckFieldName, e); }
實際寫法:
private bool _mCheckStatus; //選中狀態 private void gvCrabsRequisition_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) { if (e.Column != null && e.Column.FieldName == "CheckState") { e.Info.InnerElements.Clear(); e.Painter.DrawObject(e.Info); DevControlHelper.DrawCheckBox(e, _mCheckStatus); e.Handled = true; } } public static void DrawCheckBox(ColumnHeaderCustomDrawEventArgs e, bool chk) { var repositoryCheck = e.Column.ColumnEdit as RepositoryItemCheckEdit; if (repositoryCheck == null) return; var g = e.Graphics; var r = e.Bounds; var info = repositoryCheck.CreateViewInfo() as CheckEditViewInfo; var painter = repositoryCheck.CreatePainter() as CheckEditPainter; if (info == null) return; info.EditValue = chk; info.Bounds = r; info.CalcViewInfo(g); var args = new ControlGraphicsInfoArgs(info, new GraphicsCache(g), r); painter?.Draw(args); args.Cache.Dispose(); } private void gvCrabsRequisition_Click(object sender, EventArgs e) { if (DevControlHelper.ClickGridCheckBox(gvCrabsRequisition, "CheckState", _mCheckStatus)) { _mCheckStatus = !_mCheckStatus; } }
默認的數字、日期等輸入,都要切換輸入法才可以輸入,不能默認就支持數字的輸入,那么是否有辦法解決呢
記得逢數字,日期的控件,必須設置 ImeMode=Off 。
設置指定列可以編輯
private void gvCrabsRequisition_ShowingEditor(object sender, CancelEventArgs e) { GridView _view = sender as GridView; List<string> editList = new List<string>() { "colWarehouseRequisedActualAmountAdd", "colCheckState" }; if (editList.Contains(_view.FocusedColumn.Name) == false) { e.Cancel = true; } }
設置gridview默認屬性
/// <summary> /// 設置girdView默認屬性 /// </summary> /// <param name="gv"></param> public static void SetStyle(DevExpress.XtraGrid.Views.Grid.GridView gv) { /* * author:wxm * date :2014年7月25日10:59:08 * */ gv.OptionsView.ShowGroupPanel = false; //不允許自定義分組 gv.RowHeight = 22; //行高22 gv.OptionsView.ShowFooter = false; //不顯示頁腳 //表頭行高設置為24、分組行高設置為35(為僅有一級分組的行高) gv.ColumnPanelRowHeight = 24; gv.GroupRowHeight = 35; //列表中最前面的空白列的寬度設置為12 gv.IndicatorWidth = 12; //設置列表是否多選、多選的模式(行或單元格)、選擇的行或單元格背景是否倒置 gv.OptionsSelection.MultiSelect = false; gv.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect; gv.OptionsSelection.InvertSelection = false; gv.OptionsSelection.EnableAppearanceFocusedCell = false; //允許編輯 gv.OptionsBehavior.Editable = true; //不顯示分組面板 gv.OptionsView.ShowGroupPanel = false; //不允許用戶進行過濾和分組 gv.OptionsCustomization.AllowFilter = false; gv.OptionsCustomization.AllowGroup = false; //允許用戶拖動列和不允許進行列排序 gv.OptionsCustomization.AllowColumnMoving = true; gv.OptionsCustomization.AllowSort = false; //列標題垂直居中 gv.Appearance.HeaderPanel.Options.UseTextOptions = true; gv.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; gv.Appearance.HeaderPanel.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; //將數據行內容垂直,文字左對齊,數字右對齊 //gv.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; //gv.Appearance.Row.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; //HAlignment(水平位置):Far(數字右對齊)/Near(文字、日期左對齊) //不顯示右鍵菜單 gv.OptionsMenu.EnableColumnMenu = false; //自動過濾時不顯示過濾記錄 gv.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; }
參考:https://zhidao.baidu.com/question/1174521530470594219.html
校驗數據有效性:
/// <summary> /// 校驗更改后單元格數據有效性 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gvCrabsRequisition_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) { try { var list = gcCrabsRequisition.DataSource as List<GetCrabStockRequisitionItem>; if (list.IsHasRow()) { var lstCheck = list.Where(r => r.CheckState).ToList(); //選中1個才校驗 if (lstCheck.Count == 1) { GridView view = sender as GridView; GridColumn _productId = view.Columns["ProductId"];//原料Id GridColumn _submitAmount = view.Columns["WarehouseRequisedActualAmountAdd"];//本次調撥數量 Guid productId = (Guid)view.GetRowCellValue(e.RowHandle, _productId); var cellAmout = view.GetRowCellValue(e.RowHandle, _submitAmount); decimal submitAmount = cellAmout.IsNull() ? 0 : (decimal)cellAmout; //var serachAmount = _kvSerchActualAmountList.FirstOrDefault(s => s.Key == productId).Value; var regex = new Regex(@"^\d+$"); //正則 判斷非負整數 if (regex.IsMatch(submitAmount.ToString())) { view.SetColumnError(_submitAmount,"本次調撥數量在更改后必須是正整數!"); } //if (submitAmount > serachAmount) //{ // e.Valid = false; // view.SetColumnError(_submitAmount, "數量在更改后不能超過之前查詢的結果值,請檢查!"); // return; //} if (submitAmount <= 0 || string.IsNullOrEmpty(submitAmount.ToString())) { e.Valid = false; view.SetColumnError(_submitAmount, "數量在更改后大於0才能提交,請檢查!"); return; } if (e.Valid) { view.ClearColumnErrors(); } } } } catch (Exception ex) { MessageCommon.ShowWar($"校驗異常:{ex.Message}"); } }
DevExpress中GridControl中實現checkbox多行選中
在我們要綁定的容器中添加一個新列
我用的是DataTable 在DataTable中添加一個新列代碼如下
//新建一個數據表 probll.GetProductAll自己寫的方法 DataTable db = probll.GetProductAll(4, pageIndex, "申請中", 0, out pageCount); //在表中增加一個列 add(列名,列類型) db.Columns.Add("check", typeof(bool)); //給每一行的該列賦值 for (int i = 0; i < db.Rows.Count; i++) { db.Rows[i]["check"] = "false"; }
注意:新增列的類型為bool類型
設置可以多選
gridView1 .OptionsSelection.MultiSelect = true; gridView1 .OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;
設置獲取選中行的需要值
string value=""; string strSelected=""; for (int i = 0; i < gridView1.RowCount; i++) { // 獲取選中行的check的值 value = gridView1.GetDataRow(i)["check"].ToString(); if (value == "True") { // productid 是我綁定數據表的字段 可以自己根據需求定義 這樣就可以實現文中開始處的功能了 strSelected += gridView1.GetRowCellValue(i, "productid"); } }
原文:http://blog.csdn.net/l1158513573/article/details/46502569
gridControl:給該列添加組件(如按鈕) 三種方法 法一:打開設計器(Run Designer),選擇左側Repository,點擊In-place Editor Repository(內嵌編輯器),點擊Add右側的下拉菜單 ,選擇你想添加的控件,比如ComboBoxEdit,再在右側編輯控件的屬性,ComboBox的話就可以設置Data下的Items集合,然后點左側 Main里的Columns,點你想在上頭添加控件的列,找右側Data下的ColumnEdit,點最右邊的下拉菜單,點Existing左側的加號,就能找 到你剛才的控件,添加。會默認給該列的每一個格都加上這個控件。 法二:點擊你想添加控件的列標題,再點屬性欄中的ColumnEdit,下拉菜單點new,選擇想添加的控件,然后Column Edit左側會出現加 號,展開加號,下方會出現許多子屬性,這些都是設置內嵌的控件的屬性的。 法三:直接寫代碼。 ② 拖動一個gridControl控件,改變視圖為BandedGridview,屬性欄中點OptionView,選擇NewItemRowPosition,選Bottom ②添加引用:usingDevExpress.XtraGrid.Views.BandedGrid; form的構造函數中添加代碼: BandedGridColumn newColumn = bandedGridView1.Columns.Add() as BandedGridColumn; newColumn.Caption = "Country"; bandedGridView1.Bands[0].Columns.Add(newColumn); newColumn.Visible = true; ②(假設添加的控件是計算器)添加引用:usingDevExpress.XtraEditors.Repository; form的構造函數中繼續添加代碼,效果圖 RepositoryItemCalcEdit calcEdit = new RepositoryItemCalcEdit(); gridControl.RepositoryItems.Add(calcEdit); newColumn.ColumnEdit = calcEdit;
原文: http://blog.csdn.net/qq_30756923/article/details/77982536 整理GridControl層級表格及按鈕列
參考:
http://www.cnblogs.com/DeepLearing/p/3887601.html DevExpress GridView 那些事兒
http://blog.csdn.net/wsnwxm/article/details/7486606 DevExpress控件漢化教程詳解
http://blog.csdn.net/wsnwxm/article/details/7483900 DXperience皮膚設置 C#第三方控件學習筆記
http://group.pandorabox.cn/forum.php?mod=viewthread&tid=266 漢化提示
https://ctolib.com/topics-51073.html
DevExpress根據條件設置GridControl RepositoryItem(設定指定列)是否可編輯
http://www.cnblogs.com/DeepLearing/p/3927358.html 修改DevExpress中英文提示,將英文改為中文
http://www.cnblogs.com/YanZhiwei/p/3277455.html [DevExpress]實現GridControl輸入驗證
http://www.cnblogs.com/wuhuacong/archive/2012/07/17/2595182.html DevExpress控件開發常用要點(項目總結版)
http://blog.csdn.net/yangyifan0/article/details/11988585 DEVexpress GridControl 屬性設置