Je souhaite que par défaut les colonnes utilisent le
AutoSizeMode = DisplayedCells;
mais je souhaite également avoir la possibilité de redimensionner les colonnes, mais DisplayedCells
Le type ne permet pas de redimensionner
Des idées ?
Je souhaite que par défaut les colonnes utilisent le
AutoSizeMode = DisplayedCells;
mais je souhaite également avoir la possibilité de redimensionner les colonnes, mais DisplayedCells
Le type ne permet pas de redimensionner
Des idées ?
Vous pouvez appeler le sous DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells)
quand cela vous convient, par exemple après avoir chargé les données. Laissez le DataGridView.AutoSizeColumnsMode
seul et l'utilisateur pourra toujours redimensionner les colonnes lui-même, mais il aura un départ confortable. Le meilleur des deux mondes.
Je ne pense pas que vous puissiez y parvenir, car une fois que l'AutoSizeMode est défini sur DisplayedCells, tout le comportement est contrôlé par la conception. Mais j'ai une idée. Vous devriez garder votre colonne (je suppose que Columns[0] à des fins démonstratives) AutoSizeMode fixe à DataGridViewAutoSizeColumnMode.None
. Vous voulez le définir comme DisplayedCells
car vous pouvez souhaiter que la largeur de la colonne s'étende ou se réduise en fonction de la longueur du texte de la cellule. Mon idée est donc que chaque fois que le CellBeginEdit
commence, nous définissons la AutoSizeMode
à DisplayedCells et lorsque le CellEndEdit
démarre, nous sauvegardons la largeur (qui est auto-dimensionnée pour vous) avant de réinitialiser le système. AutoSizeMode
a None
puis j'affecte la colonne Largeur à cette valeur sauvegardée. Voici mon code :
//First before loading data
private void form_Load(object sender, EventArgs e){
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
//Fill your dataGridView here
//.........
//.........
int w = dataGridView.Columns[0].Width;
//reset to None
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
//Now for CellBeginEdit and CellEndEdit
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if(e.ColumnIndex == 0) //because I suppose the interested column here is Columns[0]
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0){
int w = dataGridView.Columns[0].Width;
dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[0].Width = w;
}
}
J'ai testé le code et il semble fonctionner correctement, il y a un cas où il ne fonctionnera pas parce que nous n'ajoutons pas de code pour ce cas, c'est-à-dire lorsque la valeur de la cellule est modifiée par le code.
Je dois dire que votre souhait est un peu étrange, je ne me soucie pas trop de la largeur de la colonne, l'utilisateur doit savoir comment faire avec.
Dans une de mes applications, j'ai réglé la taille automatique sur les cellules affichées. Puis, une fois le formulaire chargé, je désactive l'autosize afin de permettre aux utilisateurs d'effectuer le dimensionnement.
private void Form1_Load(object sender, EventArgs e)
{
// Designer has autosize set to displayedcells.
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; // Turn off autosize
dataGridView1.AllowUserToResizeRows = true; // Turn on letting user size columns
dataGridView1.AllowUserToOrderColumns = true;
}
La seule chose qui a fonctionné pour moi dans Visual Studio 2008 (et VB.net) était :
For i As Integer = 0 To grdList2.Columns.Count - 1
If i <> (grdList2.Columns.Count - 1) Then
grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
Else
grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End If
Next
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.