Хотя @Zach Johnson ответил на основную часть этого вопроса, его код не работал для меня. Потратив долгое время и прочитав разные темы, я понял, что вам также нужно установить некоторые свойства, чтобы получить эту работу. Итак, вот полный код, поэтому вы можете запустить пример:
Определить CustomDataGridViewTextBoxCell:
class CustomDataGridViewTextBoxCell: DataGridViewTextBoxCell
{
public override Type EditType => typeof(CustomDataGridViewTextBoxEditingControl);
}
Тогда определите класс CustomDataGridViewTextBoxEditingControl
class CustomDataGridViewTextBoxEditingControl : DataGridViewTextBoxEditingControl
{
public override bool EditingControlWantsInputKey(
Keys keyData,
bool dataGridViewWantsInputKey)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Enter:
// Don't let the DataGridView handle the Enter key.
return true;
default:
break;
}
return base.EditingControlWantsInputKey(keyData, dataGridViewWantsInputKey);
}
protected override void OnKeyDown(KeyEventArgs e)
{
switch (e.KeyCode & Keys.KeyCode)
{
case Keys.Enter:
int oldSelectionStart = this.SelectionStart;
string currentText = this.Text;
this.Text = String.Format("{0}{1}{2}",
currentText.Substring(0, this.SelectionStart),
Environment.NewLine,
currentText.Substring(this.SelectionStart + this.SelectionLength));
this.SelectionStart = oldSelectionStart + Environment.NewLine.Length;
break;
default:
break;
}
base.OnKeyDown(e);
}
}
Затем определите DataGridViewRolloverCell
:
public class DataGridViewRolloverCell : DataGridViewTextBoxCell
{
public override Type EditType => typeof(CustomDataGridViewTextBoxEditingControl);
}
После этого определить класс DataGridViewCustomColumn
:
public class DataGridViewCustomColumn : DataGridViewColumn
{
public DataGridViewCustomColumn()
{
this.CellTemplate = new CustomDataGridViewTextBoxCell();
}
}
Теперь, если у вас есть DatagridViewControl
с именем dgv
, ваш код будет выглядеть так:
DataGridViewCustomColumn col = new DataGridViewCustomColumn();
dgv.Columns.Add(col);
Сейчас важно :
Вам все еще нужно установить в DefaultCellStyle
свойство WrapText
до true
. Сделайте это в конструкторе или с помощью этого кода:
DataGridViewCellStyle dataGridViewCellStyle1 = DataGridViewCellStyle();
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv.DefaultCellStyle = dataGridViewCellStyle1;
И не забудьте установить для свойства Datagridview.AutoSizeRowsMode
значение AllCells
.
Тогда это будет работать.