DataGridViewTextBox
수행 포장. 긴 텍스트가 있으면 단어 끝에 단어 나누기가 적용됩니다. 요구 사항에 따라 단어 줄 바꿈을 할 때 문자 분리가 필요합니다.
재정 GetPreferredSize
방법 문자 휴식 바꿈에 따라 셀/행의 높이를 계산하기 위해 이렇게하려면 사용자 정의 셀을 생성하고 문자 휴식 포장이 방법을 수행해야합니다. 그렇게하려면 Graphics.MeasureString
메소드를 사용할 수 있습니다.
Graphics.DrawString
메서드를 사용하여 문자 줄 바꿈을 사용하여 줄 바꿈 된 문자열을 그릴 때 Paint
메서드를 재정의하는 방법입니다.
당신은 이러한 설정을 수행 할 수 있습니다
당신의 열의 DataGridView
의 폭을 사용하려면, 당신은 Fill
-AutoSizeMode
의 설정해야합니다. 이렇게하면 열 너비가 눈금을 채우고 눈금 크기에 따라 크기가 변경됩니다. 또한 하나 이상의 열이있는 경우 FillWeight
을 설정하여 다른 열과 비교하여 열 크기의 백분율을 제어 할 수 있습니다.
열의 텍스트를 줄 바꾸려면 DataGridViewTriState.True
열의 DefaultCellStyle.WrapMode
을 설정해야합니다.
행을 자동 크기로 만들려면 AutoSizeRowMode
을 DataGridView
에서 DataGridViewAutoSizeRowsMode.AllCells
으로 설정해야합니다.
우리가 작성한 사용자 정의 셀을 CellTemplate
열로 등록하십시오.
이 세포 파쇄 문자 대신 워드 브레이크를 사용하여 텍스트 배치를 수행
을 MyDataGridViewTextBoxCell.질문 @Natrium
public class MyDataGridViewTextBoxCell:DataGridViewTextBoxCell
{
protected override Size GetPreferredSize(Graphics graphics,
DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize)
{
if(cellStyle.WrapMode== DataGridViewTriState.True && this.RowIndex>=0)
{
var value= string.Format("{0}", this.FormattedValue);
using (var g = this.OwningColumn.DataGridView.CreateGraphics())
{
var r = g.MeasureString(value, cellStyle.Font, this.OwningColumn.Width)
.ToSize();
r.Width += cellStyle.Padding.Left + cellStyle.Padding.Right;
r.Height += cellStyle.Padding.Top + cellStyle.Padding.Bottom;
return r;
}
}
else
{
return base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize);
}
}
protected override void Paint(Graphics graphics, Rectangle clipBounds,
Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
object value, object formattedValue, string errorText,
DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
formattedValue, errorText, cellStyle, advancedBorderStyle,
paintParts & ~ DataGridViewPaintParts.ContentForeground);
graphics.DrawString(string.Format("{0}", formattedValue),
cellStyle.Font, Brushes.Black, cellBounds);
}
}
예
public class Model
{
public string Text { get; set; }
}
BindingList<Model> list = new BindingList<Model>();
private void Form1_Load(object sender, EventArgs e)
{
var column1 = new DataGridViewTextBoxColumn();
column1.CellTemplate = new MyDataGridViewTextBoxCell();
column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
column1.DataPropertyName = "Text";
column1.DefaultCellStyle = new DataGridViewCellStyle();
column1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
column1.HeaderText = "Text";
column1.Name = "column1";
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dataGridView1.Columns.Add(column1);
this.dataGridView1.DataSource = list;
}
private void button1_Click(object sender, EventArgs e)
{
list.Add(new Model() { Text = textBox1.Text });
}
는 텍스트 박스에 매우 상이한 DataGridView에,이 중 하나를 지칭한다. – stuartd
내 테스트 프로그램에서 작동합니다. DefaultCellStyle.WapMode를 대체 할 수 있습니까? linq를 사용하여 양식로드에서이를 확인하십시오. dataGridView1.Rows.SelectMany (row => row.Cells) .All (cell => cell.InheritedStyle == DataGridViewTriState.True); –
단어가 공백으로 구분되어있을 때 랩핑되지만, 긴 긴 문자열이 있으면 랩핑이 작동하지 않습니다. – KChow