2013-05-08 92 views
0

我想實現一個DataGridView具有比autosize更小的單元寬度。 如果你看起來非常接近一個自動化的單元格,你會注意到仍然有一些空間不用於實際顯示單元格的內容。DataGridView - 禁止所有的字換行

這就是爲什麼我自己通過TextRenderer開始測量內容的寬度,然後手動設置列的寬度。

最初的問題是,在單元實際被「填滿」之前很長時間,「A」顯示爲「A ...」。原因是cell.Style.WrapMode設置爲「nonSet」。 DataGridViewTriState.True確實適用於「A」的例子,我感到非常高興。

但現在我只注意到如果字符串有多個單詞(「A,B」),DataGridView試圖在單元實際被「填充」之前將內容顯示爲多行。

我現在在尋找的是一種方法來刪除單元格內容的「填充」,或者完全禁止某個單元格/列(=沒有字符串截斷的單行)上的單詞換行。

此外,我應該承認,該字符串沒有隱藏的空白,所以修剪完全沒有效果。

編輯︰ 我隨機偶然發現了一些似乎做我正在搜索的同事代碼。

StringFormat format = new StringFormat(StringFormatFlags.NoClip);

文檔說字符串有他們周圍的一些矩形比字符串本身更大。如果矩形伸出可寫區域,則字符串被包裹。該代碼片段會抑制該(默認)行爲。

唯一的問題是此解決方案似乎只能用於繪製字符串。我沒有找到將字符串格式對象分配給字符串的可能性。

回答

0

試試這個代碼

dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; 

dataGridView1.DefaultCellStyle.WrapMode to DataGridView1TriState.True 

希望它可以幫助你

+0

我希望內容顯示在一行中。所以不幸的是,自動化DataGridView的行是沒有選擇的。 – 2013-05-08 07:58:45

0

你可以試試這個代碼。這是在我的情況下工作。

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.Value == null) 
     return; 
    var s = e.Graphics.MeasureString(e.Value.ToString(), dataGridView1.Font); 
    if (s.Width > dataGridView1.Columns[e.ColumnIndex].Width) 
    { 
     using (
    Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), 
    backColorBrush = new SolidBrush(e.CellStyle.BackColor)) 
     { 
      e.Graphics.FillRectangle(backColorBrush, e.CellBounds); 
      e.Graphics.DrawString(e.Value.ToString(), dataGridView1.Font, Brushes.Black, e.CellBounds, StringFormat.GenericDefault); 
      dataGridView1.Rows[e.RowIndex].Height = (int)(s.Height * Math.Ceiling(s.Width/dataGridView1.Columns[e.ColumnIndex].Width)); 
      e.Handled = true; 
     } 
    } 
} 
相關問題