我已經設置了DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True
如何換行沒有在DataGridView的空間(vb.net/C#)
但這WrapMode
無空格不換行與單個詞列。有沒有什麼辦法可以和WrapMode
一起「破字」?或者其他解決方案?
我已經設置了DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True
如何換行沒有在DataGridView的空間(vb.net/C#)
但這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
必需的Height
。與當前的Row.Height
相比,您可以逐漸適應每個,即每次都有必要將其擴大。我沒有加入,因爲它會導致行高變化,這可能是不必要或不必要的案件。如果你有興趣,我可以張貼的代碼,但..
我面臨同樣的問題!還沒有解決方案! – 2014-09-26 20:26:39
你解決了你的問題嗎? – TaW 2014-10-07 15:33:15
對不起,遲到的迴應!我最終沒有使用DataGridView。我們使用付費電網的原因有很多,例如打印功能,彙總設施,過濾器,內置搜索等 – nitika 2014-10-10 11:55:07