DevExpress控件開發常用要點(項目總結版)


使用DevExpress控件來做項目開發已經有很長一段時間了,在摸索開發到客戶苛刻要求的過程中,其中碰到過很多問題需要解決的,隨着一個個問題的解決,也留下很多對DevExpress控件的使用經驗及教訓,綜合設計到的多個項目的問題,對這些開發常用的要點進行總結,方便別人也方便自己。提供這些解決方法,一個可以快速應用到項目中,二個也可以作為對界面開發的更高要求對待自己的項目,使得自己的東西更加完美,更加受歡迎。

 1、 GridControl控件的數據顯示的樣式控制

如上兩圖所示,我們有時候需要控制列表訪問過的顏色變化,或者是時間顯示格式等內容,這個時候設置GridView的RowCellStyle即可實現,如下所示。

this.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);
        void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            if (e.Column.FieldName == "PublishType")
            {
                if (e.CellValue != null && e.CellValue.ToString() == "中介")
                {
                    e.Appearance.BackColor = Color.DeepSkyBlue;
                    e.Appearance.BackColor2 = Color.LightCyan;
                }
            }
            if (e.Column.FieldName == "PublishTime")
            {
                e.Column.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
            }

            if (e.Column.FieldName == "Title")
            {
                string id = this.winGridViewPager1.gridView1.GetRowCellDisplayText(e.RowHandle, "Id");
                if (historyDict.ContainsKey(id))
                {
                    e.Appearance.BackColor = Color.DeepSkyBlue;
                    e.Appearance.BackColor2 = Color.LightCyan;
                }
            }
        }

 

2、在LayoutControl布局中固定控件寬度

固定寬度后的真實效果。

為了使得界面統一性及更好的控制性,我們一般使用LayoutControl布局控件作為我們添加控件的布局容器,但是這個控件默認是對其中的控件進行按窗口比例進行縮放的,有些客戶就不喜歡這些特點,因為他們的顯示器可能是30寸的(誇張一點點,不過很多寬屏的),這樣很多輸入框就會被拉得很長,這樣小小一個輸入框,可能有很長的一段空白的距離,那樣可能真的不好看,如下圖所示。

設置固定寬度,其實不是很麻煩,需要設置幾個屬性即可

1) 設置控件的SizeConstraintsType為DevExpress.XtraLayout.SizeConstraintsType.Custom;

2)設置控件的FillControlToClientArea 為False

3)設置控件的ControlMaxSize的大小(必要時也可以設置ControlMinSize),設置例子如下所示。

 

3、GridControl中的GridView內容打印

由於GridView的良好封裝性,實現打印的代碼很簡單。

        private void menu_Print_Click(object sender, EventArgs e)
        {
            PrintableComponentLink link = new PrintableComponentLink(new PrintingSystem());
            link.Component = this.gridControl1;
            link.Landscape = true;
            link.PaperKind = System.Drawing.Printing.PaperKind.A3;
            link.CreateMarginalHeaderArea += new CreateAreaEventHandler(Link_CreateMarginalHeaderArea);
            link.CreateDocument();
            link.ShowPreview();
        }

        private void Link_CreateMarginalHeaderArea(object sender, CreateAreaEventArgs e)
        {
            string title = string.Format("年度大體檢-({0}年度)", this.txtYear.Text);
            PageInfoBrick brick = e.Graph.DrawPageInfo(PageInfo.None, title, Color.DarkBlue,
               new RectangleF(0, 0, 100, 21), BorderSide.None);

            brick.LineAlignment = BrickAlignment.Center;
            brick.Alignment = BrickAlignment.Center;
            brick.AutoWidth = true;
            brick.Font = new System.Drawing.Font("宋體", 11f, FontStyle.Bold);
        }

 

4、設置GridView的行指示器(行頭)顯示行號

 

在我的分頁控件以及Winform開發框架很多項目介紹里面,很多都顯示了行號,其實這個在DevExpress中的實現很簡單,如果需要,可以實現在自己的代碼里面。

1) 先實現GridView的CustomDrawRowIndicator事件,實現代碼如下所示。

        private void advBandedGridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
            if (e.Info.IsRowIndicator)
            {
                if (e.RowHandle >= 0)
                {
                    e.Info.DisplayText = (e.RowHandle + 1).ToString();
                }
                else if (e.RowHandle < 0 && e.RowHandle > -1000)
                {
                    e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
                    e.Info.DisplayText = "G" + e.RowHandle.ToString();
                }
            }
        }

2)然后設置GridView控件的IndicatorWidth為合適的寬度,如40左右則比較好。

這樣設置后,就能順利顯示行號了,是不是很方便呢。

 

5、GridView表頭多行顯示(折行),表頭及行內容居中操作

在一些自定義的列表中,我們為了合理顯示表頭的內容,可能會要求表頭顯示的文字可以折行顯示,然后還需要內容居中顯示,那么在DevExpress該如何操作呢,代碼設置如下所示。

            //表頭折行設置
            this.gridView1.ColumnPanelRowHeight = 40;
            this.gridView1.OptionsView.AllowHtmlDrawHeaders = true;
            this.gridView1.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;            
            //表頭及行內容居中顯示
            this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

然后設置表頭的時候,設置內容使用\r\n來進行換行,如:體重\r\n(kg)

下面是我分頁控件里面的例子設置,供參考。

            this.winGridViewPager1.AddColumnAlias("Weight", "體重\r\n(kg)");
            this.winGridViewPager1.AddColumnAlias("Pulse", "脈搏\r\n(次)");
            this.winGridViewPager1.AddColumnAlias("BloodSystolic", "收縮壓");
            this.winGridViewPager1.AddColumnAlias("BloodDiastolic", "舒張壓");
            this.winGridViewPager1.AddColumnAlias("SightLeft", "視力\r\n(左)");
            this.winGridViewPager1.AddColumnAlias("SightRight", "視力\r\n(右)");

 

6、控件內容輸入問題

 在客戶使用軟件的時候,反饋說有一些數字輸入框、日期輸入框,不支持鍵盤輸入內容,經測試,確實是存在這個問題,默認的數字、日期等輸入,都要切換輸入法才可以輸入,不能默認就支持數字的輸入,那么是否有辦法解決呢,當然辦法總是有的。

其實只需要設置 ImeMode=Off 即可解決問題,關於這個屬性,大家可以參考下面的介紹。(就開發而言,記得逢數字,日期的控件,必須設置 ImeMode=Off ,否則你的軟件使用客戶會罵娘。

ImeMode 枚舉:指定一個值,該值是用來確定在選定了對象時該對象的輸入法編輯器 (IME) 的狀態。 以下是微軟的解釋:        

成員名稱 說明
Alpha 字母數字單字節字符 (SBC)。此設置僅對朝鮮語和日語 IME 有效。
AlphaFull 字母數字雙字節字符。此設置僅對朝鮮語和日語 IME 有效。
Close Disable IME 被禁用。如果使用此設置,則用戶無法從鍵盤打開 IME,而且 IME 浮動窗口處於隱藏狀態。
Hangul 朝鮮文 SBC。此設置僅對朝鮮語 IME 有效。
HangulFull 朝鮮文 DBC。此設置僅對朝鮮語 IME 有效。
Hiragana 平假名 DBC。此設置僅對日語 IME 有效。
Inherit 繼承父控件的 IME 模式。
Katakana 片假名 DBC。此設置僅對日語 IME 有效。
KatakanaHalf 片假名 SBC。此設置僅對日語 IME 有效。
NoControl 無(默認)。
Off IME 已關閉。此模式指示 IME 已關閉,這意味着該對象的行為方式與英語輸入模式相同。 此設置僅對日語、簡體中文和繁體中文 IME 有效。
On IME 已打開。此值指示 IME 已打開,可以輸入中文或日語特定的字符。此設置僅對日語、簡體中文和繁體中文 IME 有效。

 

 7、多行表頭的實現

有時候,我們為了一些特殊的需要,要對表頭進行特別的排版,使其支持多行表頭的效果,如上圖所示,這樣方便對各項內容進行歸類顯示,易於閱讀,在DevExpress中應該如何實現這個效果呢?

1)先在設計模式將普通的GridView轉換為BandedGridView或者AdvBandedGridView,這樣才能支持這種多行表頭的做法,如下所示。

2)定義一些字段,用來顯示其中的內容,如下圖所示。

3)定義一些Band列,設置相關的屬性,並把設計界面中的字段列表拖動到對應過的Band列上面,這樣就構成了一個Band列和字段內容的對應關系。

完成上面的綁定關系后,記得設置GridView控件的屬性,使其不要顯示原本的ColumnHeader等內容。

設置好這些內容,才能合理、完美顯示出多行表頭的信息。

 

 8. 在GridControl控件中使用SearchLookUpEdit構建數據快速輸入

 

 一個實際的案例就是門診的時候,醫生用葯的情況,除了選擇其他內容外,主要的就是快速錄入葯品信息。我們平常去大一點 的醫院看病,好像看到的多數操作都是這樣。還有一種方式就是銷售人員提供的報價單,從產品里面選擇信息,然后修改下價格,這些場景都是很適合這樣的操作的。下面是一個門診的例子。

詳細參考隨筆文章《在GridControl控件中使用SearchLookUpEdit構建數據快速輸入

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM