nir*_*mus 17 .net c# datagridview
我有一个特定列的dataGridView.当我在dataGridView中编写长文本时,它会向我显示带有省略号的缩短版本,因为列不够宽,无法显示整个字符串.
| textdsadasda... |
Run Code Online (Sandbox Code Playgroud)
如果我想dataGridView在下一行显示此文本,或者包装文本,我该怎么办?
| textdsadasda |
| dasdasa | (continuation of line above)
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
sgo*_*les 17
尝试设置
.AutoSizeMode到.DisplayedCells.AutoSizeRowsMode为AllCells.DataGridView.DefaultCellStyle.WrapMode 至 DataGridViewTriState.TrueAda*_*dam 15
没有必要通过重新粉刷细胞来重新发明轮子.
相反,只需:
AutoSizeRowsMode属性AllCells.这允许行高与任何包装文本一起增长.DataGridView.DefaultCellStyle.WrapMode
为DataGridViewTriState.True在单元格中包装文本.DataGridView.AutoSizeColumnsMode为
DataGridViewAutoSizeColumnsMode.None使列不自行调整大小(因此它们保持在用户指定的宽度).之后,如果列中没有足够的空间,文本应该换行到下一行.
处理细胞绘画事件可能可以帮助你
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.Value == null)
return;
var s = e.Graphics.MeasureString(e.Value.ToString(), dataGridView1.Font);
if (s.Width > dataGridView1.Columns[e.ColumnIndex].Width)
{
using (
Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
e.Graphics.DrawString(e.Value.ToString(), dataGridView1.Font, Brushes.Black, e.CellBounds,StringFormat.GenericDefault);
dataGridView1.Rows[e.RowIndex].Height = (int)(s.Height * Math.Ceiling( s.Width / dataGridView1.Columns[e.ColumnIndex].Width)) ;
e.Handled = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31766 次 |
| 最近记录: |