[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:
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:
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.