日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能

發(fā)布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在我上篇隨筆《在DevExpress程序中使用Winform分頁控件直接錄入數(shù)據(jù)并保存》中介紹了在GridView以及在其封裝的分頁控件上做數(shù)據(jù)的直接錄入的處理,介紹情況下數(shù)據(jù)的保存和校驗等操作,不過還沒有涉及到數(shù)據(jù)列表選擇的這種方式,而這種在項目應用也是比較廣泛的一種輸入方式。本篇隨筆繼續(xù)探討在GridView上直接錄入數(shù)據(jù),并增加字典選擇列表的功能。

1、GridView直接錄入數(shù)據(jù)回顧

在之前整合的數(shù)據(jù)錄入案例里面,我們可以看到可以在列表里面直接錄入速度的便捷性,如下所示。

1)直接在GridView上錄入并保存

2)基于WInform分頁控件的直接錄入和保存

這種方式就是利用在Griview上對數(shù)據(jù)校驗后進行保存。

校驗通過后提交數(shù)據(jù)庫,我們首先需要做的方式是定位記錄集合里面當前的記錄,把它轉(zhuǎn)換為具體的實體類對象,然后寫入新記錄或者更新處理,如下所示。

?

2、基于數(shù)據(jù)字典的下拉列表選擇輸入

我們下面介紹的內(nèi)容,作為數(shù)據(jù)直接錄入的補充,提供基于數(shù)據(jù)字典的下拉列表輸入方式。

首先我們來看看整體的效果,然后在一步步分析其中的奧秘。

例如對于性別的選擇方式。

以及基于可以搜索的下拉列表

以及多選框的數(shù)據(jù)顯示處理

或者基于按鈕選擇對話框的實現(xiàn)

這些操作能夠給列表錄入提供多樣化的選擇,也豐富了用戶的輸入模式。

那么我們?nèi)绾位贕ridView的基礎(chǔ)上實現(xiàn)這些功能呢?

首先我們基于模型構(gòu)建數(shù)據(jù)庫表,數(shù)據(jù)庫表設(shè)計如下所示。

然后基于Database2Sharp代碼生成工具生成框架底層的代碼,以及生成WInform界面代碼,生成的界面代碼其中綁定數(shù)據(jù)部分如下所示。

/// <summary> /// 綁定列表數(shù)據(jù) /// </summary> private void BindData() {//entitythis.winGridViewPager1.DisplayColumns = "Name,Sex,Nationality,BirthDate,Height,Weight,City,Area,State,Favorites,Introduction,Creator,CreateTime";this.winGridViewPager1.ColumnNameAlias = BLLFactory<Test>.Instance.GetColumnNameAlias();//字段列顯示名稱轉(zhuǎn)義string where = GetConditionSql();var list = BLLFactory<Test>.Instance.FindWithPager(where, this.winGridViewPager1.PagerInfo);this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<TestInfo>(list);this.winGridViewPager1.PrintTitle = "人員測試信息報表"; }

我們?yōu)榱颂砑訉闹苯愉浫敕绞?#xff0c;我們需要設(shè)置其中的字典綁定,處理方式如下所示,我們通過一個函數(shù)SetRepositoryItems來封裝所需處理。

/// <summary>/// 設(shè)置GridControl對應的下拉類別內(nèi)容,方便轉(zhuǎn)義/// </summary>private void SetRepositoryItems(GridView gridview){var sexList = new List<CListItem>(){new CListItem("", "1"), new CListItem("", "2"), new CListItem("未知", "0")};gridview.Columns.ColumnByFieldName("Sex").CreateLookUpEdit().BindDictItems(sexList, false);gridview.Columns.ColumnByFieldName("City").CreateLookUpEdit().BindDictItems("城市");gridview.Columns.ColumnByFieldName("Nationality").CreateSearchLookUpEdit().BindDictItems("民族");gridview.Columns.ColumnByFieldName("Area").CreateLookUpEdit().BindDictItems("市場分區(qū)");gridview.Columns.ColumnByFieldName("State").CreateLookUpEdit().BindDictItems("處理狀態(tài)");gridview.Columns.ColumnByFieldName("Favorites").CreateCheckedComboBoxEdit().BindDictItems("興趣愛好");gridview.Columns.ColumnByFieldName("Introduction").CreateMemoEdit();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);}};gridview.OptionsBehavior.ReadOnly = false;gridview.OptionsBehavior.Editable = true;}

然后在上面的BindData函數(shù)里面加入這個方法調(diào)用即可。

SetRepositoryItems(this.winGridViewPager1.gridView1);

其中的CreateLookUpEdit、CreateSearchLookUpEdit、CreateCheckedComboBoxEdit、CreateButtonEdit等方法是框架底層進行的內(nèi)容顯示控件的處理,為了方便作為擴展函數(shù)直接使用的,其規(guī)則類似

代碼類似下面的處理方式。

/// <summary>/// 創(chuàng)建GridView的列編輯為SearchLookUpEdit/// </summary>/// <param name="gridColumn">GridColumn列對象</param>/// <returns></returns>public static RepositoryItemSearchLookUpEdit CreateSearchLookUpEdit(this GridColumn gridColumn){RepositoryItemSearchLookUpEdit repositoryItem = new RepositoryItemSearchLookUpEdit{AutoHeight = false,NullText = ""};gridColumn.View.GridControl.RepositoryItems.Add(repositoryItem);gridColumn.ColumnEdit = repositoryItem;return repositoryItem;}

?

當然我們還需要注冊響應的處理事件,代碼如下所示。

private void RegisterEvent() {var grd = this.winGridViewPager1.gridControl1;var grv = this.winGridViewPager1.GridView1;grv.InitGridView(GridType.NewItem, false);#region 列表處理事件grv.InitNewRow += delegate(object sender, InitNewRowEventArgs e){GridView gridView = grd.FocusedView as GridView;gridView.SetFocusedRowCellValue("ID", Guid.NewGuid().ToString());gridView.SetFocusedRowCellValue("Creator", LoginUserInfo.Name);gridView.SetFocusedRowCellValue("CreateTime", DateTime.Now);};grv.ValidateRow += delegate(object sender, ValidateRowEventArgs e){var result = grd.ValidateRowNull(e, new string[]{"Name"});//校驗通過后提交數(shù)據(jù)庫GridView gridView = grd.FocusedView as GridView;if (result){var newInfo = grv.GetFocusedRow() as TestInfo;if (newInfo != null){result = BLLFactory<Test>.Instance.InsertUpdate(newInfo, newInfo.ID);if (!result){e.Valid = false;e.ErrorText = string.Format("寫入數(shù)據(jù)出錯");}else{base.ShowMessageAutoHide();}}}};#endregion }

然后在窗體初始化的時候,調(diào)用上面的注冊事件即可。

/// <summary> /// 人員測試信息 /// </summary> public partial class FrmTest : BaseDock {public FrmTest(){InitializeComponent();InitDictItem();this.winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);this.winGridViewPager1.OnStartExport += new EventHandler(winGridViewPager1_OnStartExport);this.winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected);this.winGridViewPager1.OnAddNew += new EventHandler(winGridViewPager1_OnAddNew);this.winGridViewPager1.OnDeleteSelected += new EventHandler(winGridViewPager1_OnDeleteSelected);this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;this.winGridViewPager1.ShowLineNumber = true;this.winGridViewPager1.BestFitColumnWith = false;//是否設(shè)置為自動調(diào)整寬度,false為不設(shè)置this.winGridViewPager1.gridView1.DataSourceChanged += new EventHandler(gridView1_DataSourceChanged);this.winGridViewPager1.gridView1.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayText);this.winGridViewPager1.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);//關(guān)聯(lián)回車鍵進行查詢foreach (Control control in this.layoutControl1.Controls){control.KeyUp += new System.Windows.Forms.KeyEventHandler(this.SearchControl_KeyUp);}//注冊對應的GridView處理事件 RegisterEvent();}

我們在數(shù)據(jù)源變化的時候,設(shè)置好各個列的寬度,方便正常顯示內(nèi)容就很完美了。

/// <summary> /// 綁定數(shù)據(jù)后,分配各列的寬度 /// </summary> private void gridView1_DataSourceChanged(object sender, EventArgs e) {if (this.winGridViewPager1.gridView1.Columns.Count > 0 && this.winGridViewPager1.gridView1.RowCount > 0){//統(tǒng)一設(shè)置100寬度foreach (DevExpress.XtraGrid.Columns.GridColumn column in this.winGridViewPager1.gridView1.Columns){column.Width = 100;}//Name,Sex,BirthDate,Height,Weight,City,Area,State,Favorites,Introduction,Creator,CreateTime//可特殊設(shè)置特別的寬度SetGridColumWidth("BirthDate", 120);SetGridColumWidth("CreateTime", 120);SetGridColumWidth("Introduction", 200);SetGridColumWidth("Favorites", 200);} }

這樣,基于開發(fā)框架基礎(chǔ)上就完成了這種直接錄入數(shù)據(jù)的處理實現(xiàn)了,非常方便,當然如果直接利用沒有封裝的GridView處理,基本上也是沒有太多變化,思路一樣的。

總結(jié)

以上是生活随笔為你收集整理的在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。