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

C# Discussion :

chargement d'un DataGridViewComboBoxCell dynamique


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut chargement d'un DataGridViewComboBoxCell dynamique
    Bonjour,
    J'ai créer un controle utilisateur qui hérite du datagridview. Une des fonctionnalité du controle est que lorsque l'utilisateur sélectionne une cellule d'une colonne bien précise la datagridviewcell est changé en DataGridViewComboBoxCell. et lorsqu'il quitte la cellule on remet la cellule comme au départ mais avec la nouvelle valeur. Cela permet la sélection de valeur bien précise. Cela fonctionne bien mais je me suis rendu compte d'une anomalie. Lorsque la cellule cliqué est situé un index de ligne identique à l'index de colonne, il y a une exception. ([3,3], [4,4] [5,5] ... ) :
    Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function.
    Le fonctionnement:
    Dans mon controle sur l'événement OnCellEnter j'appelle la fonction pour changer la cellule en combobox
    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
     
    protected override void OnCellEnter(DataGridViewCellEventArgs e)
    {
        ChangerTextEnComboBox(e.ColumnIndex, e.RowIndex);           
        base.OnCellEnter(e);
    }
     
    public void ChangerTextEnComboBox(int _colonne, int _ligne)
    {
    	GrilleDonneesCelluleValeur source = base[_colonne, _ligne] as GrilleDonneesCelluleValeur;
    	DataGridViewComboBoxCell cellule = new DataGridViewComboBoxCell();
     
    	//remplir le combobox
    	for (int i = 0; i < Enum.GetValues(typeof(ENUM_COTE)).Length; i++)
    		cellule.Items.Add(...);
     
    	//affectation des valeurs
    	cellule.Value = source.Value;
    	cellule.Tag = source;
    	base[_colonne, _ligne] = cellule;
    }
    Le problème survient comme je l'ai dit quand e.ColumnIndex et e.RowIndex sont égale et sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    base[_colonne, _ligne] = cellule;
    Voici le détail de l'erreur si c'est utile :
    System.InvalidOperationException was unhandled
    Message="Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function."
    Source="System.Windows.Forms"
    StackTrace:
    at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
    at System.Windows.Forms.DataGridView.ResetCurrentCell()
    at System.Windows.Forms.DataGridView.OnReplacingCell(DataGridViewRow dataGridViewRow, Int32 columnIndex)
    at System.Windows.Forms.DataGridViewCellCollection.set_Item(Int32 index, DataGridViewCell value)
    at System.Windows.Forms.DataGridView.set_Item(Int32 columnIndex, Int32 rowIndex, DataGridViewCell value)
    at CreateurXml.GrilleDonnees.ChangerTextEnComboBox(Int32 _colonne, Int32 _ligne)
    at CreateurXml.GrilleDonnees.OnCellEnter(DataGridViewCellEventArgs e)
    at System.Windows.Forms.DataGridView.OnCellEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex)
    at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
    at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
    at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
    at System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
    at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.DataGridView.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.Run(Form mainForm)
    Merci de m'éclairer la vue

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Finalement après recherche j'ai trouver. C'est un problème du framework qui à déjà été identifé mais qui n'a jamais été corrigé.
    Je vous tranmet l'article que j'ai trouvé : http://connect.microsoft.com/VisualS...dbackID=259512

    Et une petite solution de contournement pour les intéressé:

    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
    delegate void SetCellType(int _indexColonne, int _indexLigne);
    private bool temoinChangementCellule;
     
    protected override void OnCellEnter(DataGridViewCellEventArgs e)
            {
     
        SetCellType delChangerCellule = ChangerTextEnComboBox;
        this.BeginInvoke(delChangerCellule, e.ColumnIndex, e.RowIndex);
        temoinChangementCellule = false;
     
        base.OnCellEnter(e);
            }
     
    public void ChangerTextEnComboBox(int _colonne, int _ligne)
    {
        if (temoinChangementCellule == false)
        {
            DataGridViewCell source = base[_colonne, _ligne] as DataGridViewCell;
     
            DataGridViewComboBoxCell cellule = new DataGridViewComboBoxCell();
            //remplir le combobox
            cellule.Items.Add("item1");
            cellule.Items.Add("item3");
            cellule.Items.Add("item2");
     
            //affectation des valeurs
            cellule.Value = source.Value;
            cellule.Tag = source;
            base[_colonne, _ligne] = cellule;
            temoinChangementCellule = true;
        }
    }
    Ca me fache quand des bogues sont trouvé qu'il nous réponde que ce n'est pas assez important pour le corriger.

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

Discussions similaires

  1. Logo de chargement d'images chargées dynamiquement
    Par maxgeuser dans le forum Flash
    Réponses: 0
    Dernier message: 17/06/2012, 16h25
  2. Afficher/Masquer élément au chargement dans un formulaire dynamique
    Par titinesaku dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2011, 17h50
  3. Problème de chargement d'un Clip dynamique dans un ScrollPane
    Par amamildor dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 10/06/2009, 14h59
  4. Réponses: 9
    Dernier message: 27/01/2009, 09h17
  5. chargement d'une librairie dynamique
    Par ltournayre dans le forum C
    Réponses: 11
    Dernier message: 29/09/2006, 17h11

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