轉(zhuǎn)帖|使用教程|編輯:龔雪|2023-08-04 11:09:59.350|閱讀 184 次
概述:本文主要介紹在DevExpress的GridView的列中,動態(tài)創(chuàng)建列的時如何綁定不同的編輯處理控件,歡迎下載組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在使用DevExpress GridView時,為了方便往往使用一些擴展函數(shù),動態(tài)創(chuàng)建GridView列的編輯控件對象,然后我們可以靈活的對內(nèi)容進行編輯或者使用一些彈出的對話框窗體進行處理內(nèi)容的錄入,本文就是介紹這一主題:在DevExpress的GridView的列中,動態(tài)創(chuàng)建列的時候,綁定不同的編輯處理控件。
DevExpress擁有.NET開發(fā)需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。
DevExpress技術(shù)交流群8:523159565 歡迎一起進群討論
我們創(chuàng)建列,為了綁定相應(yīng)的數(shù)據(jù)源信息展示,一般指定列的名稱和顯示的列標(biāo)題名稱,如下是一個簡單的列創(chuàng)建處理代碼。
grv.CreateColumn("Note", "備注說明");
如果贏綁定了數(shù)據(jù)源,我們也可以根據(jù)列的FieldName進行獲得列的控制權(quán),然后給它指定不同的編輯控件,如下所示。
gridview.Columns.ColumnByFieldName("Introduction").CreateMemoEdit();
上面的CreateMemoEdit()函數(shù)就是一個簡單的擴展函數(shù),用于創(chuàng)建一個備注列的處理,它的編輯器控件 RepositoryItemMemoEdit 的RepositoryItem 擴展對象,擴展函數(shù)如下所示的代碼。
/// <summary> /// 創(chuàng)建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; }
我們把它們(這些擴展函數(shù))定義在不同的類文件中,使用靜態(tài)類就可以了。例如對于GridControl和GridView的相關(guān)處理擴展函數(shù),把它整理放在一個類文件中,定義各種方便使用的方法即可,如下所示。
對于一些簡單的錄入我們保留讓他使用默認文本輸入框即可,如下所示代碼。
this.gridViewRequisition.CreateColumn("需求金額", "需求金額", 80); this.gridViewRequisition.CreateColumn("采購數(shù)量", "采購數(shù)量", 80); this.gridViewRequisition.CreateColumn("采購金額", "采購金額", 80); this.gridViewRequisition.CreateColumn("庫存數(shù)量", "庫存數(shù)量", 80); this.gridViewRequisition.CreateColumn("可用庫存", "可用庫存", 80);
當(dāng)然,如果我們想獲得對應(yīng)列的一些特殊的處理,那么可以把獲得的列對象,賦值給變量,然后進行相關(guān)的屬性處理。
var colQuantity = grv.CreateColumn("Quantity", "銷售數(shù)量"); colQuantity.AppearanceCell.BackColor = Color.Moccasin; colQuantity.AppearanceCell.Options.UseBackColor = true; colQuantity.CreateSpinEdit();
而對于一些特殊的列,如一些下拉列表的列,我們可以指定他們的下拉列表,可以是固定列表,也可以通過函數(shù)獲取數(shù)據(jù)庫的記錄進行綁定處理,如下所示。
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的編輯控件進行處理選擇的展示。
如果我們希望對列表的特定字段進行啟用編輯,那么可以利用下面擴展函數(shù)方式實現(xiàn)。
//設(shè)置只讀、可編輯字段 this.gridViewAmount.SetColumnsReadOnly("*", false); this.gridViewAmount.SetColumnsReadOnly("序列,采購類型,需求量,備注", true);
如果需要指定特定的匯總字段,可以通過下面代碼實現(xiàn)。
// 設(shè)置統(tǒng)計字段 if (gridViewAmount?.Columns.Count > 0) { gridViewAmount.ClearSummaryColumns(); gridViewAmount.SetSummaryColumn("采購數(shù)量", DevExpress.Data.SummaryItemType.Sum); }
在上面動態(tài)創(chuàng)建的列編輯控件,對于編輯的值發(fā)生變化,需要及時的反映到實際的列表對應(yīng)的單元格的值中,一般在事件EditValueChanging 中通過SetFocusedRowCellValue 就可以設(shè)置回去了,如下代碼所示。
var note = this.gridViewRequisition.CreateColumn("備注", "備注", 100).CreateButtonEdit(); note.EditValueChanging += (ss, ee) => { gridViewRequisition.SetFocusedRowCellValue("備注", ee.NewValue); };
而對于一些數(shù)值型的內(nèi)容處理,如SpinEdit的編輯器控件,那么每次輸入一個不同的字符都會觸發(fā)這個處理,那么就有點不正常的了,因此可以通過下面的方式進行矯正,利用EditValueChanged事件的處理。
var xuqiuLiang = this.gridViewRequisition.CreateColumn("需求數(shù)量", "需求數(shù)量", 80).CreateSpinEdit(); xuqiuLiang.ValidateOnEnterKey = true; xuqiuLiang.EditValueChanged += async (ss, ee) => { var value = ((ss) as SpinEdit).Value; this.gridViewRequisition.SetFocusedRowCellValue("需求數(shù)量", value); //刷新顯示 gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle); };
上面的代碼,通過把對應(yīng)的當(dāng)前控件轉(zhuǎn)換為編輯器控件,獲得值再行處理也是可以的。
另外,有時候,如果列的內(nèi)容變更了,我們需要及時刷新指定列表行的內(nèi)容,可以通過下面的代碼實現(xiàn)的。
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; } };
而對于列的一些格式轉(zhuǎn)義操作,我們可以統(tǒng)一處理,可以把幾個不同的GridView的轉(zhuǎn)義函數(shù)放在一起。
//統(tǒng)一處理轉(zhuǎn)義信息 this.gridViewRequisition.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSubx.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSpecification.CustomColumnDisplayText += CustomColumnDisplayText;
轉(zhuǎn)義一般對日期的格式和數(shù)值型的格式進行一些格式化處理,如下代碼所示。
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中,根據(jù)不同的字段名稱進行處理。
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; //醒目顏色 } } };
有時候,我們需要反色當(dāng)前選擇的單元格,那么可以通過事件CustomDrawCell 進行控制,如下代碼所示。
this.gridView1.CustomDrawCell += (s, e) => { // 設(shè)置選中單元格的背景顏色 if (e.Column == gridView1.FocusedColumn && e.RowHandle == gridView1.FocusedRowHandle) { e.Appearance.BackColor = Color.LightGreen; } };
以上就是一些利用GridView進行處理的一些經(jīng)驗代碼總結(jié),希望對您有所啟發(fā)。
本文轉(zhuǎn)載自:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)