2014-09-26 59 views
4

我已經設置了DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True如何換行沒有在DataGridView的空間(vb.net/C#)

但這WrapMode無空格不換行與單個詞列。有沒有什麼辦法可以和WrapMode一起「破字」?或者其他解決方案?

+0

我面臨同樣的問題!還沒有解決方案! – 2014-09-26 20:26:39

+0

你解決了你的問題嗎? – TaW 2014-10-07 15:33:15

+0

對不起,遲到的迴應!我最終沒有使用DataGridView。我們使用付費電網的原因有很多,例如打印功能,彙總設施,過濾器,內置搜索等 – nitika 2014-10-10 11:55:07

回答

2

你可以玩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相比,您可以逐漸適應每個,即每次都有必要將其擴大。我沒有加入,因爲它會導致行高變化,這可能是不必要或不必要的案件。如果你有興趣,我可以張貼的代碼,但..

enter image description here

0

喜Shimply添加下面一行在屬性窗口綁定

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

set 
AutosizecolumnMode=AllCells 
AutosizeRowMode=AllCells 

輸出將被作爲hown後belo圖片 enter image description here