轉(zhuǎn)帖|其它|編輯:郝浩|2012-10-31 13:37:25.000|閱讀 6034 次
概述:本文首先通過簡單的例子介紹一下,在DevExpress GridControl控件中使用SearchLookUpEdit構(gòu)建數(shù)據(jù)快速輸入。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本文首先通過簡單的例子介紹一下,在DevExpress GridControl控件中使用SearchLookUpEdit構(gòu)建數(shù)據(jù)快速輸入。
1、 GridControl集成SearchLookUpEdit的效果展現(xiàn)
1)啟動后默認(rèn)效果
2)彈出窗體效果
3)選中數(shù)據(jù)后效果圖
其實上面是一個測試的例子,具體的應(yīng)用會比較復(fù)雜一點,不過操作過程差不多,我們都是在一個Cell里面嵌入一個可以選擇(包括查詢)的數(shù)據(jù)列表,從中選擇我們需要的內(nèi)容,然后可以在另外一個Cell中輸入一些其他的信息,保存的時候,一并保存即可。
在開始介紹之前,我們要清楚,這個GridControl必須先綁定數(shù)據(jù)源(數(shù)據(jù)源可以為空),如果不綁定數(shù)據(jù)源,那么雖然可以彈出列表供選擇,但是鼠標(biāo)移開值就會丟失的問題,一開始不明白其中道理,搞了很久。
首先要為GridControl添加兩個字段,設(shè)置好他們的顯示Caption和FieldName即可,然后在我們需要彈出窗口的單元格對象中,選擇它的ColumnEdit控件為SearchLookup控件即可,如下所示。
這個時候,它會生成一個repositoryItemSearchLookUpEdit1的控件,這個控件就是該單元格的內(nèi)嵌編輯控件了,可以從中選擇列表的值,我們設(shè)置這個列表的DisplayMember為Name(顯示的字段內(nèi)容),ValueMember為ID(保存的值字段),如下所示。
除了你要設(shè)置主窗體里面的GridControl運行添加列外,你還需要設(shè)置編輯控件里面的View中OpitonsView里面的NewItemRowPosition為Botton(默認(rèn)為None),這一步很重要,否則無法出現(xiàn)一個新建的行給你錄入數(shù)據(jù)的。
例子代碼比較簡單,主要是為了演示這種方式的使用,代碼如下所示
DataTable dt = new DataTable(); private void Form1_Load(object sender, EventArgs e) { dt.Columns.Add("ID"); dt.Columns.Add("Name"); for (int i = 0; i < 100; i++) { DataRow row = dt.NewRow(); row["ID"] = i.ToString(); row["Name"] = (new Random()).NextDouble().ToString(); dt.Rows.Add(row); System.Threading.Thread.Sleep(1); } this.repositoryItemSearchLookUpEdit1.DataSource = dt; this.gridControl1.DataSource = dt.Clone(); } private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (e.Column.FieldName == "ID") { string id = e.Value.ToString(); DataRow[] dr = dt.Select(string.Format("ID = '{0}'", id)); if(dr != null && dr.Length > 0) { DataRow row = dr[0]; string name = row["Name"].ToString(); gridView1.SetRowCellValue(e.RowHandle, "Name", name); } } }
3、 GridControl集成SearchLookUpEdit的實際案例操作
一個實際的案例就是門診的時候,醫(yī)生用藥的情況,除了選擇其他內(nèi)容外,主要的就是快速錄入藥品信息。我們平常去大一點 的醫(yī)院看病,好像看到的多數(shù)操作都是這樣。還有一種方式就是銷售人員提供的報價單,從產(chǎn)品里面選擇信息,然后修改下價格,這些場景都是很適合這樣的操作的。下面是一個門診的例子。
在實際應(yīng)用中,我們在編輯一些歷史數(shù)據(jù)的時候,不希望原來的記錄被修改,但是可以增加新的記錄,但是前面所有介紹的內(nèi)容,沒有能夠解決這個問題,那么我們應(yīng)該如何操作才能實現(xiàn)這個效果呢?
其實GridView對象里面有一個ShowingEditor的事件,用來判斷是否顯示單元格的編輯器的,這樣我們對數(shù)據(jù)庫已有記錄進行控制,不讓它在列表中顯示編輯控件出來即可,具體代碼如下所示。
this.gridView1.ShowingEditor += new CancelEventHandler(gridView1_ShowingEditor);//實際使用的代碼 void gridView1_ShowingEditor(object sender, CancelEventArgs e) { object ID = this.gridView1.GetRowCellValue(this.gridView1.FocusedRowHandle, "ID"); if (ID != null && !string.IsNullOrEmpty(ID.ToString())) { e.Cancel = true; } }
在保持?jǐn)?shù)據(jù)的時候,我們對歷史數(shù)據(jù)就不用修改保持,只需要針對新增的內(nèi)容即可,如何做到的呢?其實就是判定他的綁定值是否存在即可,如果有綁定值,那么就是歷史的數(shù)據(jù),沒有就是新的,進行特殊操作即可,如下代碼所示。
if (this.gridView1.RowCount > 0) { #region 提交用藥記錄明細(xì) for (int i = 0; i < this.gridView1.RowCount; i++) { //根據(jù)ID來判斷是否新增的用藥記錄 object ID = this.gridView1.GetRowCellValue(i, "ID"); if (ID == null || string.IsNullOrEmpty(ID.ToString())) { //......................... } } #endregion }
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園