DataGridTextBoxColumnTrim:DataGrid不能完全显示时显示,部分显示“...”

来源:互联网 发布:pca分析软件 编辑:程序博客网 时间:2024/06/07 07:31

DataGrid控件中的单元格中的内容如果比单元格还大的话,就会自动剪切后面过多的部分。

下面的代码提供一个解决方案,当单元格不够长的时候,显示部分+“...”。

效果:

 

 

代码如下:

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. namespace LJCM
  8. {
  9.     /* YTY 2008/11/26添加
  10.      * 当不能完全显示时,显示部分+"..."
  11.     * */
  12.     /// <summary>
  13.     /// DataGridTextBoxTrim 当不能完全显示时,以“...”代替
  14.     /// </summary>
  15.     public class DataGridTextBoxColumnTirm:DataGridTextBoxColumn
  16.     {
  17.         public DataGridTextBoxColumnTirm()
  18.         {
  19.             //
  20.             // TODO: 在此处添加构造函数逻辑
  21.             //
  22.         }
  23.         protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum)
  24.         {
  25.             
  26.             string text = GetColumnValueAtRow(source,rowNum).ToString();
  27.             if(g.MeasureString(text,this.DataGridTableStyle.DataGrid.Font,bounds.Width).Height
  28.                 >bounds.Height)
  29.             {
  30.                 Brush backBrush = new SolidBrush(base.DataGridTableStyle.BackColor);
  31.                 Brush foreBrush    = new SolidBrush(base.DataGridTableStyle.ForeColor);
  32.                 Rectangle rect = bounds;
  33.                 StringFormat format   = new StringFormat();
  34.                 format.FormatFlags = StringFormatFlags.LineLimit;
  35.                 format.Trimming = StringTrimming.EllipsisCharacter;
  36.                 g.DrawString(text,this.DataGridTableStyle.DataGrid.Font, foreBrush, rect, format);
  37.                 format.Dispose();
  38.             }
  39.             else
  40.             {
  41.                 base.Paint(g,bounds,source,rowNum);
  42.             }
  43.             /*end*/
  44.         }
  45.         protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, bool alignToRight)
  46.         {
  47.             string text = GetColumnValueAtRow(source,rowNum).ToString();
  48.             if(g.MeasureString(text,this.DataGridTableStyle.DataGrid.Font,bounds.Width).Height
  49.                 >bounds.Height)
  50.             {                                                                                     
  51.                 //Brush backBrush = new SolidBrush(base.DataGridTableStyle.BackColor);
  52.                 Brush foreBrush = new SolidBrush(base.DataGridTableStyle.ForeColor);
  53.                 Rectangle rect = bounds;
  54.                 StringFormat format   = new StringFormat();
  55.                 if(alignToRight)
  56.                 {
  57.                     format.FormatFlags = StringFormatFlags.LineLimit;
  58.                     format.Trimming = StringTrimming.EllipsisPath;
  59.                 }
  60.                 else
  61.                 {
  62.                     format.FormatFlags = StringFormatFlags.LineLimit;
  63.                     format.Trimming = StringTrimming.EllipsisCharacter;
  64.                 }
  65.                 g.DrawString(text,this.DataGridTableStyle.DataGrid.Font, foreBrush, rect, format);
  66.                 format.Dispose();
  67.             }
  68.             else
  69.             {
  70.                 base.Paint(g,bounds,source,rowNum,alignToRight);
  71.             }
  72.             /* end*/
  73.         }
  74.         protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
  75.         {
  76.             string text = GetColumnValueAtRow(source,rowNum).ToString();
  77.             g.FillRectangle(backBrush,bounds);
  78.             if(g.MeasureString(text,this.DataGridTableStyle.DataGrid.Font,bounds.Width).Height
  79.                 >bounds.Height)
  80.             {
  81.                 //Brush backBrush = new SolidBrush(base.DataGridTableStyle.BackColor);
  82.                 //Brush foreBrush    = new SolidBrush(base.DataGridTableStyle.ForeColor);
  83.                 Rectangle rect = bounds;
  84.                 StringFormat format   = new StringFormat();
  85.                 if(alignToRight)
  86.                 {
  87.                     format.FormatFlags = StringFormatFlags.LineLimit;
  88.                     format.Trimming = StringTrimming.EllipsisPath;
  89.                 }
  90.                 else
  91.                 {
  92.                     format.FormatFlags = StringFormatFlags.LineLimit;
  93.                     format.Trimming = StringTrimming.EllipsisCharacter;
  94.                 }
  95.                 
  96.                 g.DrawString(text,this.DataGridTableStyle.DataGrid.Font, foreBrush, rect, format);
  97.                 format.Dispose();
  98.             }
  99.             else
  100.             {
  101.                 base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
  102.             }
  103.         }
  104.     }
  105. }

 

原创粉丝点击