RE: Datagridview header cells with vertical text



Hello,

Really thanks for your answer; old Boss Bill can be proud of you 8-D.

I'll implement it this way.

--
Roger Tranchez
MCTS
..NET 2005 and DB developer


"Linda Liu [MSFT]" wrote:

Hi Roger,

Thank you for your reply and detailed explanation! I can understand your
question now.

Firstly, to custom draw a DataGridView, we need to handle its CellPainting
event.

Secondly, to draw a vertical oriented text, we could call the
Graphics.DrawString(string,Brush,RectangleF,StringFormat) method passing an
instance of StringFormat with a DirectionVertical format flag to this
method. For example:

System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat();
drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
// g is a Graphics object. The text "hello" will be drawn in vertical
orientation
g.DrawString("hello", this.Font, Brushes.Orange, new PointF(0,
0),drawFormat);

Unfortunately, the reading direction of the text "hello" would be from top
to bottom using the above method, which doesn't meet your requirement.

A solution is to call the Graphics.TranslateTransform and RotateTransform
methods to get what you want. The following is a sample.

void dataGridView1_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex >= 0)
{
e.PaintBackground(e.ClipBounds, true);
Rectangle rect =
this.dataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, true);
Size titleSize =
TextRenderer.MeasureText(e.Value.ToString(), e.CellStyle.Font);
if (this.dataGridView1.ColumnHeadersHeight <
titleSize.Width)
this.dataGridView1.ColumnHeadersHeight =
titleSize.Width;

e.Graphics.TranslateTransform(0, titleSize.Width);
e.Graphics.RotateTransform(-90.0F);

e.Graphics.DrawString(e.Value.ToString(), this.Font,
Brushes.Orange, new PointF(rect.Y, rect.X));

e.Graphics.RotateTransform(90.0F);
e.Graphics.TranslateTransform(0, -titleSize.Width);
e.Handled = true;
}
}

In addition, you could set the AutoSizeColumnsMode property of the
DataGridView to AllCellsExceptHeader in order to make the DataGridView
compact.

Hope this helps.
If you have any question, please feel free to let me know.

Sincerely,
Linda Liu
Microsoft Online Community Support


.



Relevant Pages

  • Derived DataGridView and Code serialization
    ... When deriving from DataGridView and implementing custom draw for columns and cells I noticed that the designer is serializing the same column properties over and over again into InitializeComponent. ... It can be easily reproduced from the samples on www.windowsforms.net that customize the DataGridView -- i.e. Outlook look and feel, Outlook calendar, etc. -- just bring the project up in design mode, maybe switch back and forth to code view a few times and voila you will have many duplicate column entries in InitializeComponent. ...
    (microsoft.public.dotnet.framework.windowsforms.controls)
  • RE: Datagridview header cells with vertical text
    ... Firstly, to custom draw a DataGridView, we need to handle its CellPainting ... instance of StringFormat with a DirectionVertical format flag to this ...
    (microsoft.public.dotnet.framework.windowsforms.designtime)

Loading