轉帖|使用教程|編輯:龔雪|2023-05-26 10:47:00.260|閱讀 213 次
概述:本文將為大家介紹基于DevExpress的GridControl實現的一些界面處理功能,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress的GridControl控件能夠提供很多強大的操作,其視圖GridView能夠通過各種設置,呈現出多種復雜的界面效果,本篇隨筆探討一些常見的GridControl控件及其GridView的視圖操作處理,以便在大家也需要的時候作為一個參考的代碼。其中設計一些常見的操作,如合并單元格、匯總統計、復制粘貼行、導入數據處理、導出Excel、導出PDF等、打印GridView視圖、內置插入及保存數據處理等等。
DevExpress技術交流群8:523159565 歡迎一起進群討論
有時候,需要把多行緊挨著的單元格內容進行合并展示,這樣有助于界面的美觀及查看便利,如下界面所示。
或者這樣的界面,都是類似的效果。
合并的處理比較簡單,只需要設置允許合并,以及實現合并的處理事件代碼即可。
//允許合并 this.gridView1.OptionsView.AllowCellMerge = true;
然后實現的事件代碼如下所示。
private List<string> mergeFields = new List<string> { "訂單號", "客戶訂單號", "客戶編碼", "客戶名稱", "組合編碼", "組合名稱"}; private void GridView1_CellMerge(object sender, CellMergeEventArgs e) { var fieldName = e.Column.FieldName; if(mergeFields.Contains(fieldName)) { var view = sender as GridView; if(view != null) { // 獲取當前單元格的值 var cellValue = view.GetRowCellValue(e.RowHandle1, fieldName); // 獲取前一行相同列的單元格的值 var prevCellValue = view.GetRowCellValue(e.RowHandle2, fieldName); if (e.RowHandle2 >= 0 && cellValue != null && cellValue.Equals(prevCellValue)) { // 合并單元格 e.Merge = true; e.Handled = true; } } } else { e.Merge = false; e.Handled = true; } }
我們可以根據自己的業務需要,設置一些合并的字段,放在列表中即可。呈現的界面效果類似下面所示。
這里值得注意的時候,如果我們需要把列表設置為具有復選框的記錄顯示模式,方便勾選來進行其他操作,那么就需要取消合并的功能。
this.gridView1.OptionsView.AllowCellMerge = false;
這樣才可以進行展示復選框的處理。
匯總的處理,也是類似的操作,需要設置顯示底部的面板,以及設置好匯總列的處理信息。
為了更方便的設置統計信息,我們可以建立一個擴展函數的方式,來實現統計行的信息處理,如下擴展方法所示。
/// <summary> /// 設置統計列內容 /// </summary> /// <param name="gridView">GridView對象</param> /// <param name="fieldName">統計字段</param> /// <param name="summaryItemType">統計類型</param> /// <param name="prefix">顯示前綴</param> public static void SetSummaryColumn(this GridView gridView, string fieldName, SummaryItemType summaryItemType = SummaryItemType.Sum, string prefix = "") { if (!gridView.OptionsView.ShowFooter) { gridView.OptionsView.ShowFooter = true; } if (gridView.Columns.Count > 0) { gridView.Columns[fieldName].SummaryItem.FieldName = fieldName; gridView.Columns[fieldName].SummaryItem.DisplayFormat = gridView.Columns[fieldName].DisplayFormat.FormatString; gridView.Columns[fieldName].SummaryItem.SummaryType = summaryItemType; gridView.Columns[fieldName].SummaryItem.DisplayFormat = prefix + "{0}"; } }
如果我們需要在創建統計行的時候,請空它之前的記錄信息,那么也可以增加多一個擴展函數來處理清空統計信息,如下所示。
/// <summary> /// 清空統計項目 /// </summary> /// <param name="gridView"></param> public static void ClearSummaryColumns(this GridView gridView) { gridView.OptionsView.ShowFooter = false; foreach (GridColumn column in gridView.Columns) { if (column.SummaryItem != null) { column.SummaryItem.Collection.Clear(); } } }
最終我們在界面上創建統計信息的代碼如下所示。
//添加統計行 gridView1.ClearSummaryColumns(); gridView1.SetSummaryColumn("訂單量", DevExpress.Data.SummaryItemType.Sum); gridView1.SetSummaryColumn("完成數量", DevExpress.Data.SummaryItemType.Sum);
最終的界面效果如下所示:
有時候為了更加便捷的對記錄信息進行復制或者粘貼到GridView列表中進行處理,那么需要設置相關的GridView的屬性,讓它能夠允許復制并設置復制的信息,這樣的格式化后,就可以用于粘貼到記事本或者粘貼到新增記錄模式下的GridView視圖中了。
我們只需要設置其中的OptionsClipboard中的某些屬性,如下代碼所示。
//實現選擇復制到新的行中 view.OptionsClipboard.AllowCopy = DefaultBoolean.True; //允許復制 view.OptionsClipboard.CopyColumnHeaders = DefaultBoolean.False; //是否復制表頭 view.OptionsClipboard.PasteMode = DevExpress.Export.PasteMode.Append; //粘貼模式 view.OptionsClipboard.ClipboardMode = DevExpress.Export.ClipboardMode.Formatted;//格式化模式
然后,如果我們的GridView是設置到編輯模式的話,設置下面的代碼,讓它可以新增粘貼的記錄。
view.OptionsBehavior.Editable = true; view.OptionsBehavior.ReadOnly = false; view.OptionsBehavior.AllowAddRows = true;
設置好這些,我們如果需要從剪切板中粘貼記錄過來,那么只需要簡單的餓調用下即可。
view.PasteFromClipboard();//從剪切板中復制記錄過來
如果需要從Excel里面導入到記錄表里面我們只需要讀取Excel里面的記錄,然后設置到當前的列表中即可。
var fileDialog = new OpenFileDialog(); fileDialog.Title = "導入xcel"; fileDialog.Filter = "Excel文件(*.xls)|*.xls"; var dialogResult = fileDialog.ShowDialog(this); if (dialogResult == DialogResult.OK) { ExcelImporter.ImportExcel(fileDialog.FileName, currentView); }
GridView本身控件提供了ExportToXls、ExportToXlsx兩個方法,可以直接把數據導出為Excel文件,可以指定常規的xls或者xlsx的格式。
如下代碼所示。
var fileDialog = new SaveFileDialog(); fileDialog.Title = "導出Excel"; fileDialog.Filter = "Excel文件(*.xls)|*.xls"; var dialogResult = fileDialog.ShowDialog(this); if (dialogResult == DialogResult.OK) { var options = new XlsExportOptions(); options.TextExportMode = TextExportMode.Text; //修改綁定數據的格式為文本 view.ExportToXls(fileDialog.FileName); MessageDxUtil.ShowTips("導出Excel成功!"); if (openExcel && File.Exists(fileDialog.FileName)) { System.Diagnostics.Process.Start(fileDialog.FileName); } }
當然,我們也可以利用第三方控件Aspose.Cell或者NPOI、Myxls的控件進行Excel的導出操作,那樣也可以提供更多通用的控制處理。
自定義格式的報表導出,可以是一個典型的圖文并茂的統計報表,類似樣式如下所示。
一般我們使用封裝好的方法,通用的導出Excel內容即可,有時候我們直接利用分頁控件進行封裝,導出常規的Excel文檔。
AsposeExcelTools.DataTableToExcel2(table, (String)e.Argument, out outError);
導出Excel數據的效果如下所示。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: