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;
}