2010-08-09 7 views
2

J'ai cherché sur le Web mais je n'ai pas été capable de trouver une réponse.DataGridView: Formater des valeurs sans réellement modifier les données délimitées?

J'ai un DataGridView avec un BindingSource borné, qui a une liste d'objets d'une classe personnalisée. Parmi les champs de la classe, j'ai un champ de chaîne que je veux montrer à l'aide

Path.GetFileName(); 

car il contient toute filepath et ce que je veux est de montrer que le nom du fichier, mais en gardant le filepath (c.-à- , les données bornées intactes) dans l'objet délimité.

Y a-t-il un moyen de le faire (Format, modèle, styles, ...)? parce que chaque fois que je change le champ Valeur de la cellule, il change la valeur de l'objet (ce qui est logique).

Un grand merci à l'avance

Répondre

4

Utilisez l'événement DataGridView.CellFormatting sur DataGridView. Cela vous donnera un objet DataGridViewCellFormattingEventArgs avec des informations sur la cellule en cours, y compris la ligne et la colonne et la valeur non formatée. Vous mettez à jour la propriété Value à la valeur formatée et définissez FormattingApplied à true et DataGridView rendra cette valeur.

Quelque chose comme ceci:

private void dataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.ColumnIndex == 0) // Check for the column you want 
    { 
     e.Value = Path.GetFileName(e.Value.ToString()); 
     e.FormattingApplied = true; 
    } 
} 
+0

Merci beaucoup, cela a fonctionné parfaitement! –

+0

aucune idée pourquoi cela semble faire un débordement de pile? J'ai 3 colonnes, et par la rangée 4 il a déjà été appelé> 50 fois – Maslow

+0

nvm, j'essayais de changer 'cell.value' au lieu de' e.value' sur accident – Maslow

0

La classe Binding a un gestionnaire d'événements Format() et Parse() où vous pouvez définir la façon dont les données seront formatées dans les deux sens.

Questions connexes