4 votes

c# datagridview column autosizemode

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 ?

6voto

John Points 504

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.

2voto

King King Points 30608

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.

1voto

Kauê Gimenes Points 1207

Rame :

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);

Colonne :

dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

0voto

PHBeagle Points 122

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

0voto

M Akin Points 56

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.com

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.

Powered by:

X