如何在DataGridView(vb.net/c#)中包装没有空格的文本

如何在DataGridView(vb.net/c#)中包装没有空格的文本,c#,.net,vb.net,datagridview,word-wrap,C#,.net,Vb.net,Datagridview,Word Wrap,我已经设置了DataGridView.DefaultCellStyle.WrapMode=DataGridViewTriState.True 但是这个WrapMode不会用一个没有空格的单词来包装列。我们有什么办法可以在WrapMode的同时“打断单词”吗?或任何其他解决方案?您可以使用CellPaint事件 抽绳尊重边框矩形,并将其缠绕到右边框的任何位置 您可以取消对条件的注释,使其仅适用于超出您设置的限制的单元格。 为了获得最佳控制,您必须测量FormattedValue的长度,以找出确切的

我已经设置了
DataGridView.DefaultCellStyle.WrapMode=DataGridViewTriState.True


但是这个
WrapMode
不会用一个没有空格的单词来包装列。我们有什么办法可以在
WrapMode
的同时“打断单词”吗?或任何其他解决方案?

您可以使用
CellPaint
事件

抽绳
尊重边框矩形,并将其缠绕到右边框的任何位置

您可以取消对条件的注释,使其仅适用于超出您设置的限制的单元格。 为了获得最佳控制,您必须测量
FormattedValue
的长度,以找出确切的限制

如果单元中有特殊的对齐方式,则可能还需要微调绘制位置

private void DGV1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.Value == null) return;
    if (e.FormattedValue.GetType() != typeof( System.String) ) return;
    bool selected = (e.State & DataGridViewElementStates.Selected) 
                            == DataGridViewElementStates.Selected;
    string s = e.FormattedValue.ToString();

    //if (s.Length > 20) // Apply to all or only those breaking your limits
    {
        e.PaintBackground(e.CellBounds, selected);
        e.Graphics.DrawString(s, DGV1.Font, selected ? 
                   SystemBrushes.HighlightText : SystemBrushes.ControlText, 
                   new Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 2, 
                                 e.CellBounds.Width - 2, e.CellBounds.Height - 4));
        e.Handled = true;
    }
}
设置
行的高度取决于您。如果你去测量
格式化值
,你会得到一个
矩形f
;因此,您还将知道该
单元格所需的
高度。将其与当前的
行进行比较。高度
您可以为每一
逐渐调整它,也就是说,每次需要时都将其变大。。我没有包括在内,因为它会导致不同高度的行,这在您的情况下可能是不需要的/不必要的。如果你感兴趣的话,我可以发布代码


hi Shimply在数据绑定后添加以下行

DGLogs.Columns[0].DefaultCellStyle.WrapMode=DataGridViewTriState.True;

set
AutosizecolumnMode=AllCells
AutosizeRowMode=AllCells
在属性窗口中

输出将如hown belo图像所示

我也遇到过同样的问题!还没有解决办法!你解决问题了吗?很抱歉反应太晚了!我最终没有使用DataGridView。我们使用付费网格的原因还有很多,如打印功能、摘要设施、过滤器、内置搜索等