轉(zhuǎn)帖|使用教程|編輯:龔雪|2021-02-20 09:39:15.323|閱讀 582 次
概述:本文主要介紹一些常見的DevExpress控件開發(fā)常用知識點,希望能幫助到大家~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress擁有.NET開發(fā)需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。
使用DevExpress控件來做項目開發(fā)已經(jīng)有很長一段時間了,在摸索開發(fā)到客戶苛刻要求的過程中,其中碰到過很多問題需要解決的,隨著一個個問題的解決,也留下很多對DevExpress控件的使用經(jīng)驗及教訓,綜合設(shè)計到的多個項目的問題,對這些開發(fā)常用的要點進行總結(jié),方便別人也方便自己。提供這些解決方法,一個可以快速應用到項目中,二個也可以作為對界面開發(fā)的更高要求對待自己的項目,使得自己的東西更加完美,更加受歡迎。
如上兩圖所示,我們有時候需要控制列表訪問過的顏色變化,或者是時間顯示格式等內(nèi)容,這個時候設(shè)置GridView的RowCellStyle即可實現(xiàn),如下所示。
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;
}
}
}
固定寬度后的真實效果。
為了使得界面統(tǒng)一性及更好的控制性,我們一般使用LayoutControl布局控件作為我們添加控件的布局容器,但是這個控件默認是對其中的控件進行按窗口比例進行縮放的,有些客戶就不喜歡這些特點,因為他們的顯示器可能是30寸的(夸張一點點,不過很多寬屏的),這樣很多輸入框就會被拉得很長,這樣小小一個輸入框,可能有很長的一段空白的距離,那樣可能真的不好看,如下圖所示。
設(shè)置固定寬度,其實不是很麻煩,需要設(shè)置幾個屬性即可
由于GridView的良好封裝性,實現(xiàn)打印的代碼很簡單。
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);
}
在我的以及很多項目介紹里面,很多都顯示了行號,其實這個在DevExpress中的實現(xiàn)很簡單,如果需要,可以實現(xiàn)在自己的代碼里面。
1. 先實現(xiàn)GridView的CustomDrawRowIndicator事件,實現(xiàn)代碼如下所示。
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. 然后設(shè)置GridView控件的IndicatorWidth為合適的寬度,如40左右則比較好。
這樣設(shè)置后,就能順利顯示行號了,是不是很方便呢。
在一些自定義的列表中,我們?yōu)榱撕侠盹@示表頭的內(nèi)容,可能會要求表頭顯示的文字可以折行顯示,然后還需要內(nèi)容居中顯示,那么在DevExpress該如何操作呢,代碼設(shè)置如下所示。
//表頭折行設(shè)置 this.gridView1.ColumnPanelRowHeight = 40; this.gridView1.OptionsView.AllowHtmlDrawHeaders = true; this.gridView1.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap; //表頭及行內(nèi)容居中顯示 this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
然后設(shè)置表頭的時候,設(shè)置內(nèi)容使用\r\n來進行換行,如:體重\r\n(kg)
下面是我分頁控件里面的例子設(shè)置,供參考。
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(右)");
在客戶使用軟件的時候,反饋說有一些數(shù)字輸入框、日期輸入框,不支持鍵盤輸入內(nèi)容,經(jīng)測試,確實是存在這個問題,默認的數(shù)字、日期等輸入,都要切換輸入法才可以輸入,不能默認就支持數(shù)字的輸入,那么是否有辦法解決呢,當然辦法總是有的。
其實只需要設(shè)置 ImeMode=Off 即可解決問題,關(guān)于這個屬性,大家可以參考下面的介紹。(就開發(fā)而言,記得逢數(shù)字,日期的控件,必須設(shè)置 ImeMode=Off ,否則你的軟件使用客戶會罵娘。
ImeMode 枚舉:指定一個值,該值是用來確定在選定了對象時該對象的輸入法編輯器 (IME) 的狀態(tài)。 以下是微軟的解釋:
有時候,我們?yōu)榱艘恍┨?殊的需要,要對表頭進行特別的排版,使其支持多行表頭的效果,如上圖所示,這樣方便對各項內(nèi)容進行歸類顯示,易于閱讀,在DevExpress中應該如何實現(xiàn)這個效果呢?
1. 先在設(shè)計模式將普通的GridView轉(zhuǎn)換為BandedGridView或者AdvBandedGridView,這樣才能支持這種多行表頭的做法,如下所示。
2. 定義一些字段,用來顯示其中的內(nèi)容,如下圖所示。
3. 定義一些Band列,設(shè)置相關(guān)的屬性,并把設(shè)計界面中的字段列表拖動到對應過的Band列上面,這樣就構(gòu)成了一個Band列和字段內(nèi)容的對應關(guān)系。
完成上面的綁定關(guān)系后,記得設(shè)置GridView控件的屬性,使其不要顯示原本的ColumnHeader等內(nèi)容。
設(shè)置好這些內(nèi)容,才能合理、完美顯示出多行表頭的信息。
一個實際的案例就是門診的時候,醫(yī)生用藥的情況,除了選擇其他內(nèi)容外,主要的就是快速錄入藥品信息。我們平常去大一點 的醫(yī)院看病,好像看到的多數(shù)操作都是這樣。還有一種方式就是銷售人員提供的報價單,從產(chǎn)品里面選擇信息,然后修改下價格,這些場景都是很適合這樣的操作的。
本文轉(zhuǎn)載自
DevExpress技術(shù)交流群3:700924826 歡迎一起進群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)