Comment mettre en colonne DataGridView à multi zone de texte en ligne?
-
21-09-2019 - |
Question
Comment laisser "DataGridViewTextBoxColumn
" dans DataGridView
prend en charge la propriété multiligne ?
La solution
Vous devriez être en mesure d'atteindre cet objectif en définissant le WrapMode
du DefaultCellStyle
de votre DataGridViewTextBoxColumn
à true
.
Autres conseils
J'ai trouvé qu'il ya deux choses que vous devez faire, à la fois dans le concepteur, pour faire un spectacle de cellule de texte de plusieurs lignes. Tim S. Van Haren mentionné, vous devez définir WrapMode
du DefaultCellStyle
de votre DataGridViewTextBoxColumn
à true
. Et bien que cela ne rend l'enveloppe de texte, il ne fait pas la ligne d'élargir pour montrer quoi que ce soit au-delà de la première ligne. En plus de WrapMode
, le AutoSizeRowsMode
du DataGridView
doit être réglé sur la valeur d'énumération de DataGridViewAutoSizeRowsMode
appropriée. Une valeur telle que DataGridViewAutoSizeRowsMode.AllCells
permet à la cellule d'étendre verticalement et montrer l'ensemble du texte enveloppé.
En dehors de la mise en WrapMode
du DefaultCellStyle
, vous pouvez faire ce qui suit:
- Vous devez attraper l'événement
EditingControlShowing
de GridView - Cast propriété
Control
sur les EventArgs au type que vous voulez (par exemple zone de texte, case à cocher, ou le bouton) - En utilisant ce type casted, modifiez la propriété
Multiline
comme ci-dessous:
private void MyGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox TB = (TextBox)e.Control;
TB.Multiline = true;
}
int multilineht = 0;
private void CustGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
multilineht = CustGridView.Rows[CustGridView.CurrentCell.RowIndex].Height;
CustGridView.AutoResizeRow(CustGridView.CurrentCell.RowIndex, DataGridViewAutoSizeRowMode.AllCells);
}
private void CustGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
CustGridView.Rows[CustGridView.CurrentCell.RowIndex].Height = multilineht;
}