IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#][.Net2][DataGridView]Colonne perso


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Par défaut [C#][.Net2][DataGridView]Colonne perso
    Bonjour tout le monde. J'ai besoin dans mon application de pouvoir saisir uniquement des données numériques dans des TextBox mais aussi des DataGridView. Pour les TextBox, je me suis créé un composant en suivant ce tutoriel du site et ça fonctionne bien. Je suis ensuite allé jeter un oeil chez msdn histoire de voir comment customiser les dataGridView avec un MaskedTextBox et aussi un DateTimePicker. Je décide d'adapter la méthode à mon TextBox perso.
    La compilation se passe bien, je peux ajouter une colonne au datagridview sans problème, mais lorsque j'essaie de l'éditer, il me lève une exception "NullReferenceException" sur cette partie là du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    		{
    			DataGridViewTextBoxExtEditingControl dGVtBExtec_;
    			DataGridViewTextBoxExtColumn dGVtBExtcol_;
    			DataGridViewColumn dGVcol_;
     
    			base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
     
    			dGVtBExtec_ = this.DataGridView.EditingControl as DataGridViewTextBoxExtEditingControl;
     
    			dGVcol_ = this.OwningColumn;
     
    			if (dGVcol_ is DataGridViewTextBoxExtColumn)
    			{
    				dGVtBExtcol_ = dGVcol_ as DataGridViewTextBoxExtColumn;
     
    				dGVtBExtec_.DecimalSeparator = this._decimalSeparator; // erreur NullReferenceException
     
    				dGVtBExtec_.GroupSeparator = this._groupSeparator;
     
    				dGVtBExtec_.MaxIntegers = this._maxIntegers;
     
    				dGVtBExtec_.MaxDecimals = this._maxDecimals;
     
    				dGVtBExtec_.Suffix = this._suffix;
     
    				dGVtBExtec_.Text = (string)this.Value;
    			}
    		}
    qui se trouve dans la classe DataGridViewTextBoxExtCell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Globalization;
     
    namespace ControlsExt
    {
    	class DataGridViewTextBoxExtCell : DataGridViewTextBoxCell
    	{
    		private char _decimalSeparator;
    		private char _groupSeparator;
    		private int _maxIntegers;
    		private int _maxDecimals;
    		private string _suffix;
    		private DataGridViewTriState _allowNegative;
     
    		public virtual char DecimalSeparator
    		{
    			get { return this._decimalSeparator; }
    			set { this._decimalSeparator = value; }
    		}
     
    		public virtual char GroupSeparator
    		{
    			get { return this._groupSeparator; }
    			set { this._groupSeparator = value; }
    		}
     
    		public virtual int MaxIntegers
    		{
    			get { return this._maxIntegers; }
    			set { this._maxIntegers = value; }
    		}
     
    		public virtual int MacDecimals
    		{
    			get { return this._maxDecimals; }
    			set { this._maxDecimals = value; }
    		}
     
    		public virtual string Suffix
    		{
    			get { return this._suffix; }
    			set { this._suffix = value; }
    		}
     
    		public virtual DataGridViewTriState AllowNegative
    		{
    			get { return this._allowNegative; }
    			set { this._allowNegative = value; }
    		}
     
    		public DataGridViewTextBoxExtCell()
    			: base()
    		{
    			this._decimalSeparator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator[0];
    			this._groupSeparator = NumberFormatInfo.CurrentInfo.NumberGroupSeparator[0];
    			this._maxIntegers = 4;
    			this._maxDecimals = 2;
    			this._suffix = "";
    			this._allowNegative = DataGridViewTriState.NotSet;
    			this.Style.Format = "C2";
    		}
     
    		public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    		{
    			DataGridViewTextBoxExtEditingControl dGVtBExtec_;
    			DataGridViewTextBoxExtColumn dGVtBExtcol_;
    			DataGridViewColumn dGVcol_;
     
    			base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
     
    			dGVtBExtec_ = this.DataGridView.EditingControl as DataGridViewTextBoxExtEditingControl;
     
    			dGVcol_ = this.OwningColumn;
     
    			if (dGVcol_ is DataGridViewTextBoxExtColumn)
    			{
    				dGVtBExtcol_ = dGVcol_ as DataGridViewTextBoxExtColumn;
     
    				dGVtBExtec_.DecimalSeparator = this._decimalSeparator;
     
    				dGVtBExtec_.GroupSeparator = this._groupSeparator;
     
    				dGVtBExtec_.MaxIntegers = this._maxIntegers;
     
    				dGVtBExtec_.MaxDecimals = this._maxDecimals;
     
    				dGVtBExtec_.Suffix = this._suffix;
     
    				dGVtBExtec_.Text = (string)this.Value;
    			}
    		}
     
    		public override Type EditType
    		{
    			get
    			{
    				return typeof(DataGridViewTextBoxEditingControl);
    			}
    		}
    	}
    }
    Pourriez vous m'aider ? Je ne suis pas très fort en control custom mais je suis prêt à apprendre. Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Par défaut
    Oups, ben finalement c'est bon, j'avais fait une erreur sur la syntaxe ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return typeof(DataGridViewTextBoxEditingControl);
    qu'il fallait que je remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return typeof(DataGridViewTextBoxExtEditingControl);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DataGridView colonnes style
    Par Magicabdou dans le forum Développement Windows
    Réponses: 1
    Dernier message: 16/10/2010, 12h22
  2. Datagridview colonne au format date
    Par Timtom60 dans le forum VB.NET
    Réponses: 9
    Dernier message: 19/05/2010, 16h45
  3. datagridview colonne non utilisable
    Par psychosiffleur dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/02/2010, 10h41
  4. [Erreur] Suppression d'une colonne perso
    Par Tybo34 dans le forum SharePoint
    Réponses: 3
    Dernier message: 12/09/2008, 09h36
  5. [VB.NET] Datagridview + colonne
    Par olbi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2006, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo