确保dataGridView列中的文本换行

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.
  • 设置AutoSizeRowsModeAllCells.
  • DataGridView.DefaultCellStyle.WrapModeDataGridViewTriState.True


Ada*_*dam 15

没有必要通过重新粉刷细胞来重新发明轮子.

相反,只需:

  • 设置AutoSizeRowsMode属性AllCells.这允许行高与任何包装文本一起增长.
  • 设置DataGridView.DefaultCellStyle.WrapModeDataGridViewTriState.True在单元格中包装文本.
  • 最重要的是设置DataGridView.AutoSizeColumnsModeDataGridViewAutoSizeColumnsMode.None使列不自行调整大小(因此它们保持在用户指定的宽度).

之后,如果列中没有足够的空间,文本应该换行到下一行.

  • 这节省了我的一天.也可以通过设计师点击几下来配置. (4认同)

Dev*_*erX 3

处理细胞绘画事件可能可以帮助你

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)