轉帖|使用教程|編輯:龔雪|2023-08-04 11:09:59.350|閱讀 184 次
概述:本文主要介紹在DevExpress的GridView的列中,動態創建列的時如何綁定不同的編輯處理控件,歡迎下載組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在使用DevExpress GridView時,為了方便往往使用一些擴展函數,動態創建GridView列的編輯控件對象,然后我們可以靈活的對內容進行編輯或者使用一些彈出的對話框窗體進行處理內容的錄入,本文就是介紹這一主題:在DevExpress的GridView的列中,動態創建列的時候,綁定不同的編輯處理控件。
DevExpress擁有.NET開發需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。
DevExpress技術交流群8:523159565 歡迎一起進群討論
我們創建列,為了綁定相應的數據源信息展示,一般指定列的名稱和顯示的列標題名稱,如下是一個簡單的列創建處理代碼。
grv.CreateColumn("Note", "備注說明");
如果贏綁定了數據源,我們也可以根據列的FieldName進行獲得列的控制權,然后給它指定不同的編輯控件,如下所示。
gridview.Columns.ColumnByFieldName("Introduction").CreateMemoEdit();
上面的CreateMemoEdit()函數就是一個簡單的擴展函數,用于創建一個備注列的處理,它的編輯器控件 RepositoryItemMemoEdit 的RepositoryItem 擴展對象,擴展函數如下所示的代碼。
/// <summary> /// 創建GridView的列編輯為MemoEdit /// </summary> /// <param name="gridColumn">GridColumn列對象</param> /// <returns></returns> public static RepositoryItemMemoEdit CreateMemoEdit(this GridColumn gridColumn) { RepositoryItemMemoEdit repositoryItem = new RepositoryItemMemoEdit { AutoHeight = false, LinesCount = 0 }; gridColumn.View.GridControl.RepositoryItems.Add(repositoryItem); gridColumn.ColumnEdit = repositoryItem; return repositoryItem; }
我們把它們(這些擴展函數)定義在不同的類文件中,使用靜態類就可以了。例如對于GridControl和GridView的相關處理擴展函數,把它整理放在一個類文件中,定義各種方便使用的方法即可,如下所示。
對于一些簡單的錄入我們保留讓他使用默認文本輸入框即可,如下所示代碼。
this.gridViewRequisition.CreateColumn("需求金額", "需求金額", 80); this.gridViewRequisition.CreateColumn("采購數量", "采購數量", 80); this.gridViewRequisition.CreateColumn("采購金額", "采購金額", 80); this.gridViewRequisition.CreateColumn("庫存數量", "庫存數量", 80); this.gridViewRequisition.CreateColumn("可用庫存", "可用庫存", 80);
當然,如果我們想獲得對應列的一些特殊的處理,那么可以把獲得的列對象,賦值給變量,然后進行相關的屬性處理。
var colQuantity = grv.CreateColumn("Quantity", "銷售數量"); colQuantity.AppearanceCell.BackColor = Color.Moccasin; colQuantity.AppearanceCell.Options.UseBackColor = true; colQuantity.CreateSpinEdit();
而對于一些特殊的列,如一些下拉列表的列,我們可以指定他們的下拉列表,可以是固定列表,也可以通過函數獲取數據庫的記錄進行綁定處理,如下所示。
var purchaseType = this.gridViewRequisition.CreateColumn("采購類型", "采購類型", 80).CreateGridLookUpEdit(); var typeList = new List<CListItem>() { new CListItem("正品"), new CListItem("樣品"), new CListItem("免費") }; purchaseType.BindDictItems(typeList, false);
而如果備注處理,嫌GridView里面輸入太麻煩,可以使用彈出的對話框進行處理,如下代碼所示。
var note = this.gridViewRequisition.CreateColumn("備注", "備注", 100).CreateButtonEdit(); note.EditValueChanging += (ss, ee) => { gridViewRequisition.SetFocusedRowCellValue("備注", ee.NewValue); }; note.ButtonClick += (ss, ee) => { var dlg = new FrmShowTextEdit(); dlg.FieldDefaultValue = gridViewRequisition.GetFocusedRowCellDisplayText("備注"); dlg.FieldDisplayName = "備注"; if (dlg.ShowDialog() == DialogResult.OK) { gridViewRequisition.SetFocusedRowCellValue("備注", dlg.ReturnValue); } };
彈出界面如下所示。
或者有時候,我們使用一些其他的選擇對話框,也是類似的處理方式。
gridview.Columns.ColumnByFieldName("Creator").CreateButtonEdit().ButtonClick += (object sender, ButtonPressedEventArgs e) => { FrmSelectCustomer dlg = new FrmSelectCustomer(); if(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if(gridview.GetFocusedRow() == null) { gridview.AddNewRow();//如果首次則增加一行 } gridview.SetFocusedRowCellValue("Creator", dlg.CustomerName); } };
如一些列表,也可以使用LookupEdit的編輯控件進行處理選擇的展示。
如果我們希望對列表的特定字段進行啟用編輯,那么可以利用下面擴展函數方式實現。
//設置只讀、可編輯字段 this.gridViewAmount.SetColumnsReadOnly("*", false); this.gridViewAmount.SetColumnsReadOnly("序列,采購類型,需求量,備注", true);
如果需要指定特定的匯總字段,可以通過下面代碼實現。
// 設置統計字段 if (gridViewAmount?.Columns.Count > 0) { gridViewAmount.ClearSummaryColumns(); gridViewAmount.SetSummaryColumn("采購數量", DevExpress.Data.SummaryItemType.Sum); }
在上面動態創建的列編輯控件,對于編輯的值發生變化,需要及時的反映到實際的列表對應的單元格的值中,一般在事件EditValueChanging 中通過SetFocusedRowCellValue 就可以設置回去了,如下代碼所示。
var note = this.gridViewRequisition.CreateColumn("備注", "備注", 100).CreateButtonEdit(); note.EditValueChanging += (ss, ee) => { gridViewRequisition.SetFocusedRowCellValue("備注", ee.NewValue); };
而對于一些數值型的內容處理,如SpinEdit的編輯器控件,那么每次輸入一個不同的字符都會觸發這個處理,那么就有點不正常的了,因此可以通過下面的方式進行矯正,利用EditValueChanged事件的處理。
var xuqiuLiang = this.gridViewRequisition.CreateColumn("需求數量", "需求數量", 80).CreateSpinEdit(); xuqiuLiang.ValidateOnEnterKey = true; xuqiuLiang.EditValueChanged += async (ss, ee) => { var value = ((ss) as SpinEdit).Value; this.gridViewRequisition.SetFocusedRowCellValue("需求數量", value); //刷新顯示 gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle); };
上面的代碼,通過把對應的當前控件轉換為編輯器控件,獲得值再行處理也是可以的。
另外,有時候,如果列的內容變更了,我們需要及時刷新指定列表行的內容,可以通過下面的代碼實現的。
gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle);
對于一些列表,需要給它指定刪除的操作,方便移除整條記錄,那么為它添加刪除鍵即可,如下代碼所示。
//行刪除操作 this.gridViewRequisition.OptionsBehavior.AllowDeleteRows = DefaultBoolean.True; this.gridViewRequisition.KeyDown += (s, ee) => { if (ee.KeyCode == Keys.Delete) {//移除記錄 gridViewRequisition.DeleteRow(gridViewRequisition.FocusedRowHandle); gridViewRequisition.RefreshData(); ee.Handled = true; } };
而對于列的一些格式轉義操作,我們可以統一處理,可以把幾個不同的GridView的轉義函數放在一起。
//統一處理轉義信息 this.gridViewRequisition.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSubx.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSpecification.CustomColumnDisplayText += CustomColumnDisplayText;
轉義一般對日期的格式和數值型的格式進行一些格式化處理,如下代碼所示。
private void CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) { string columnName = e.Column.FieldName; if (e.Column.ColumnType == typeof(DateTime) || e.Column.ColumnType == typeof(DateTime?)) { if (e.Value != null) { if (e.Value == DBNull.Value || Convert.ToDateTime(e.Value) <= Convert.ToDateTime("1900-1-1")) { e.DisplayText = ""; } else { e.DisplayText = Convert.ToDateTime(e.Value).ToString("yyyy-MM-dd HH:mm");//yyyy-MM-dd } } } else if (e.Column.ColumnType == typeof(decimal) || e.Column.ColumnType == typeof(decimal?)) { decimal value; if (decimal.TryParse(e.DisplayText, out value)) { e.DisplayText = value.ToString("0.################"); } } }
而如果喜歡對列的背景色等進行自定義,可以在事件RowCellStyle中,根據不同的字段名稱進行處理。
this.gridViewSpecification.RowCellStyle += (s, e) => { e.Appearance.BackColor = Color.Transparent; if (e.Column.FieldName == "序列") { var xulie = string.Concat(gridViewSubx.GetFocusedRowCellValue("序列")); if (!xulie.IsNullOrEmpty() && e.CellValue?.ToString() == xulie) { e.Appearance.BackColor = Color.Red; //醒目顏色 } } };
有時候,我們需要反色當前選擇的單元格,那么可以通過事件CustomDrawCell 進行控制,如下代碼所示。
this.gridView1.CustomDrawCell += (s, e) => { // 設置選中單元格的背景顏色 if (e.Column == gridView1.FocusedColumn && e.RowHandle == gridView1.FocusedRowHandle) { e.Appearance.BackColor = Color.LightGreen; } };
以上就是一些利用GridView進行處理的一些經驗代碼總結,希望對您有所啟發。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網