datagridview中的垂直文本

我想以垂直方向显示标题单元格中的文本。 我该怎么做?

谢谢

您可以使用标题的自定义单元格绘制来获得所需的结果。

在回答你的评论,要求找到一种方法将文本与单元格的底部对齐时,我已经在我的代码中添加了注释。 他们希望很清楚。

您需要以下代码(比如在初始化组件后在Form_Load中)

dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; dataGridView1.ColumnHeadersHeight = 50; dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader; // Here we attach an event handler to the cell painting event dataGridView1.CellPainting += new DataGridViewCellPaintingEventHandler(dataGridView1_CellPainting); 

接下来,您需要类似以下代码:

 void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { // check that we are in a header cell! 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); // This is the key line for bottom alignment - we adjust the PointF based on the // ColumnHeadersHeight minus the current text width. ColumnHeadersHeight is the // maximum of all the columns since we paint cells twice - though this fact // may not be true in all usages! e.Graphics.DrawString(e.Value.ToString(), this.Font, Brushes.Black, new PointF(rect.Y - (dataGridView1.ColumnHeadersHeight - titleSize.Width) , rect.X)); // The old line for comparison //e.Graphics.DrawString(e.Value.ToString(), this.Font, Brushes.Black, new PointF(rect.Y, rect.X)); e.Graphics.RotateTransform(90.0F); e.Graphics.TranslateTransform(0, -titleSize.Width); e.Handled = true; } } 

一种更简单,更有效的渲染器

通过设计器或使用此行代码附加事件

 dataGridView1.CellPainting += new DataGridView1_CellPainting(dataGridView1_CellPainting); 

绘制旋转文本的事件处理程序

 private void DataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { // Vertical text from column 0, or adjust below, if first column(s) to be skipped if (e.RowIndex == -1 && e.ColumnIndex >= 0) { e.PaintBackground(e.CellBounds, true); e.Graphics.TranslateTransform(e.CellBounds.Left , e.CellBounds.Bottom); e.Graphics.RotateTransform(270); e.Graphics.DrawString(e.FormattedValue.ToString(),e.CellStyle.Font,Brushes.Black,5,5); e.Graphics.ResetTransform(); e.Handled = true; } } 
 DataGrid d = new DataGrid(); d.Columns[0].HeaderStyle.VerticalAlign = VerticalAlign.Bottom; 

如果您正在寻找gridview,那么您的情况如下: –

 GridView gv = new GridView (); gv.Columns[0].ItemStyle.VerticalAlign = VerticalAlign.Bottom; 

如果您正在寻找datagridview,那么您的情况如下: – 创建datagridview的对象。

 gv.Columns["ColumnName"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter; 
 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.