DataGridView -禁止所有换行



我试图实现一个DataGridView,具有比autosize更小的单元格宽度。如果你仔细观察一个自动调整大小的单元格,你会发现仍然有一些空间不是用来显示单元格的内容的。

这就是为什么我开始通过TextRenderer自己测量内容的宽度,然后手动设置列的宽度。

最初的问题是,在单元格实际"填充"之前,"a"被显示为"a…"。原因是cell.Style.WrapMode被设置为"nonSet"。我很高兴DataGridViewTriState.True确实为"A"的例子工作。

但是现在我注意到,如果字符串有多个单词("A, B"),DataGridView试图在单元格实际"填充"之前将内容显示到几行。

我现在正在寻找的是一种方法来删除单元格内容的"填充"或完全抑制某个单元格/列上的单词包装(=单行没有字符串的切断)。

另外,我应该承认在字符串上没有隐藏的空白,所以trim没有任何作用。

编辑:

我偶然发现了一些同事的代码,它们似乎可以做我正在寻找的事情。

StringFormat format = new StringFormat(StringFormatFlags.NoClip);

文档中说字符串周围有一个比字符串本身大的矩形。如果矩形超出可写区域,则字符串被包裹。该代码片段抑制了该(默认)行为。

唯一的问题是,这个解决方案似乎只适用于绘制字符串。我没有发现将stringformat对象赋值给字符串的可能性

试试这个代码

dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;
dataGridView1.DefaultCellStyle.WrapMode to DataGridView1TriState.True

希望对你有所帮助

可以试试这段代码吗?这在我的情况下是可行的。

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;
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新