我已经设置了DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True
但是这个WrapMode不会用单个单词包装没有空格的列.有什么方法可以和WrapMode一起“破解”吗?或任何其他解决方案?
最佳答案 您可以使用CellPainting事件.
DrawString遵循边界Rectangle并在它到达右边界的任何地方进行包装.
您可以取消注释条件以仅应用于超出您设置的限制的单元格.
为了获得最佳控制,您必须测量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;
}
}
设置Row.Heights取决于您.如果你去测量FormattedValue,你会得到一个RectangleF;所以你也会知道那个Cell的必要高度.将它与当前的Row.Height进行比较,您可以逐渐调整每一行,即每次必要时使其更大..我没有包括,因为它会导致行具有不同的高度,这可能是不需要的/不必要的在你的情况下.如果您有兴趣,我可以发布代码,但..