1. 程式人生 > 實用技巧 >DevExpress開發中bandedGridView的特殊上下標設定

DevExpress開發中bandedGridView的特殊上下標設定

DevExpress開發專案中,GridView和bandedGridView的列標題經常需要顯示一些帶有下標或上標的文字,如下圖所示:

如果上標是平方或是立方,可以通過輸入法完成,平方(二次方)如下所示:

同樣,立方(三次方)也是一樣的方法,不在贅述。但對於下標和其他的一些上標,則可用如下方法進行:

  1 // 表頭設定
  2 private void bandedGridView1_CustomDrawBandHeader(object sender, DevExpress.XtraGrid.Views.BandedGrid.BandHeaderCustomDrawEventArgs e)
3 { 4 DrawBandHeader("Test", null, "1", "gridBand1", sender, e); 5 DrawBandHeader("Test", "1", null, "gridBand2", sender, e); 6 DrawBandHeader("Test", "1", "1", "gridBand3", sender, e); 7 } 8 9 /// <summary> 10 /// 重繪Band名稱 11 /// </summary> 12 /// <param name="strBase">
底數</param> 13 /// <param name="subStr">下標</param> 14 /// <param name="supStr">上標</param> 15 /// <param name="bandName">GridBand名稱</param> 16 /// <param name="sender"></param> 17 /// <param name="e"></param> 18 private void DrawBandHeader(string strBase, string
subStr, string supStr, string bandName, object sender, DevExpress.XtraGrid.Views.BandedGrid.BandHeaderCustomDrawEventArgs e) 19 { 20 if (!e.Band.Name.Equals(bandName)) 21 return; 22 23 float startX = (e.Bounds.Left + e.Bounds.Right) / 2; 24 float startY = e.Bounds.Top; 25 e.Info.Caption = ""; 26 e.Painter.DrawObject(e.Info); 27 28 // 繪製底數 29 Font baseFont = new Font(e.Appearance.Font.OriginalFontName, e.Appearance.Font.Size); 30 e.Graphics.DrawString(strBase, baseFont, Brushes.Black, startX, startY); 31 32 // 求上標或下標起點的參考位置 33 startX += e.Graphics.MeasureString(strBase, baseFont).Width - 2; 34 35 // 上下標大小字型 36 Font scriptFont = new Font(e.Appearance.Font.OriginalFontName, 37 e.Appearance.Font.Size - 3); 38 // 繪製下標 39 if (subStr != null) 40 { 41 e.Graphics.DrawString(subStr, scriptFont, Brushes.Black, startX, startY + 9); 42 } 43 44 // 繪製上標 45 if (supStr != null) 46 { 47 e.Graphics.DrawString(supStr, scriptFont, Brushes.Black, startX, startY + 2); 48 } 49 50 e.Handled = true; 51 } 52 53 // 列標題設定 54 private void bandedGridView1_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) 55 { 56 DrawColHeader("Game", null, "1", "bandedGridColumn1", sender, e); 57 DrawColHeader("Game", "1", null, "bandedGridColumn2", sender, e); 58 DrawColHeader("Game", "1", "1", "bandedGridColumn3", sender, e); 59 } 60 61 /// <summary> 62 /// 重繪列標題 63 /// </summary> 64 /// <param name="strBase">底數</param> 65 /// <param name="subStr">下標</param> 66 /// <param name="supStr">上標</param> 67 /// <param name="colName">列名</param> 68 /// <param name="sender"></param> 69 /// <param name="e"></param> 70 private void DrawColHeader(string strBase, string subStr, string supStr, string colName, object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) 71 { 72 if (e.Column != null && !e.Column.Name.Equals(colName)) 73 return; 74 75 float startX = (e.Bounds.Left + e.Bounds.Right) / 2; 76 float startY = e.Bounds.Top; 77 e.Info.Caption = ""; 78 e.Painter.DrawObject(e.Info); 79 80 // 繪製底數 81 Font baseFont = new Font(e.Appearance.Font.OriginalFontName, e.Appearance.Font.Size); 82 e.Graphics.DrawString(strBase, baseFont, Brushes.Black, startX, startY); 83 84 // 求上標或下標起點的參考位置 85 startX += e.Graphics.MeasureString(strBase, baseFont).Width - 2; 86 87 // 上下標大小字型 88 Font scriptFont = new Font(e.Appearance.Font.OriginalFontName, 89 e.Appearance.Font.Size - 3); 90 // 繪製下標 91 if (subStr != null) 92 { 93 e.Graphics.DrawString(subStr, scriptFont, Brushes.Black, startX, startY + 9); 94 } 95 96 // 繪製上標 97 if (supStr != null) 98 { 99 e.Graphics.DrawString(supStr, scriptFont, Brushes.Black, startX, startY + 2); 100 } 101 102 e.Handled = true; 103 }
View Code

實現效果如下如所示,可根據需要替換上下標內容: