DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
目前有使用這兩行程式碼自動換行,但遇到路徑或者英文過長時無法截斷自動換行。
請問各位是否有方法或屬性可以讓路徑或過長的英文也能自動換行。
謝謝大家。
使用DataGridView的CellPainting事件
private void DataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    //如果儲存格有值
    if (e.Value != null)  
    {
        //使用 StringFormat 來設定文字格式
        using (StringFormat stringFormat = new StringFormat())  
        {
            //文字對齊方式:靠左對齊
            stringFormat.Alignment = StringAlignment.Near;   
            
            //文字水平置中
            stringFormat.LineAlignment = StringAlignment.Center;  
            
            //截斷字元,超出的部分會用...取代
            stringFormat.Trimming = StringTrimming.Word;  
            
            //指定要把文字繪製在幾行內,超過的行就會自動換行
            stringFormat.FormatFlags = StringFormatFlags.LineLimit; 
            
            //使用筆刷來繪製文字
            using (Brush brush = new SolidBrush(e.CellStyle.ForeColor)) 
            {
                //繪製文字,使用儲存格中的值,並使用儲存格的字體,筆刷,儲存格範圍,和stringFormat
                e.Graphics.DrawString((string)e.Value, e.CellStyle.Font, brush, e.CellBounds, stringFormat);                 
            }
        }
        
        //標記處理完成
        e.Handled = true;  
    }
}
注意 這個事件必須在 form_load 或儲存格繪製之前綁定,並且需要讓 DataGridView 的 AutoSizeRowsMode 屬性為 None。
private void Form1_Load(object sender, EventArgs e)
{
    //綁定CellPainting事件,指定事件處理常式是DataGridView1_CellPainting
    this.dataGridView1.CellPainting += new DataGridViewCellPaintingEventHandler(DataGridView1_CellPainting);
    
    //設定 AutoSizeRowsMode 屬性為 None,這樣儲存格高度不會自動調整
    DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
    
    //設定DefaultCellStyle.WrapMode屬性為True, 讓文字自動換行
    DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
}