如何在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。我们使用付费网格的原因还有很多,如打印功能、摘要设施、过滤器、内置搜索等