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++Builder Discussion :

TValueListEditor: Ajout automatique d'une ligne vide


Sujet :

C++Builder

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut TValueListEditor: Ajout automatique d'une ligne vide
    Bonjour,

    J'utilise un composant TValueListEditor pour gérer des catégories et j'aimerai faire trois choses:
    1) Avoir toujours une ligne vide en bas de la liste (càd ajouter une ligne avec InsertRow dès que l'utilisateur entre une donnée dans une case vide)
    2) Vérifier la validité des valeurs introduites par l'utiilsateur et les stocker lorsqu'il quitte une cellule grâce à OnValidate
    3) Proposer des valeurs par défaut grâce à OnGetPickList

    Mon problème est que lorsque l'utilisateur choisi une valeur dans la liste déroulante, l'événement OnValidate n'est pas appelé et mon programme ne peut pas récupérer la valeur à ce moment pour la stocker :-(

    Ci-après le code que j'utilise.

    On voit que:
    J'entre une valeur à la main: OnValidate est correctement appelé
    Je choisis une valeur dans la liste: OnValidate n'est pas appelé


    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
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
      addLine=true;
      ValueListEditor1->InsertRow("Start","",true);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ValueListEditor1GetPickList(TObject *Sender,
          const AnsiString KeyName, TStrings *Values)
    {
      Values->Clear();
      Values->Append("Hello 1");
      Values->Append("Hello 2");
      Values->Append("Hello 3");
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::ValueListEditor1Validate(TObject *Sender, int ACol,
          int ARow, const AnsiString KeyName, const AnsiString KeyValue)
    {
      MessageDlg(KeyName+"="+KeyValue+" is ok",mtInformation,
                 TMsgDlgButtons()<<mbOK,0);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ValueListEditor1StringsChange(TObject *Sender)
    {
      if (!addLine) return;
      addLine=false;
      ValueListEditor1->InsertRow("New","",true);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ValueListEditor1SelectCell(TObject *Sender,
          int ACol, int ARow, bool &CanSelect)
    {
      AnsiString currentContent=ValueListEditor1->Cells[ACol][ARow];
      if (currentContent.IsEmpty()) addLine=true;
      else addLine=false;
    }
    //---------------------------------------------------------------------------

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Salut,

    J'ai le meme soucis que toi, mais j'ai 'triché' (ouh : )....
    J'ai fais en sorte que pour valider ce qui est saisi ou choisi dans la picklist plus exactement, l'utilisateur doit taper 'entrée' et donc je gère l'évènement OnKeyDown du TValueListEditor.
    Je décale le 'curseur' d'une ligne pour déclencher le OnValidate() lorsque cette touche est tapée, donc avec qqchose comme 'ValueListEditor->Row + 1' ou 'ValueListEditor->Row - 1'.
    Bon, c'est pas génial mais ca marche...

    @ +

  3. #3
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Pour l'ajout d'une ligne en fin de liste du ValueListEd, essaie peut etre qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1->ValueListEd1->InsertRow(NULL, NULL, true);
    Je ne peut pas 'approfondir' de suite mais je crois que c'est sur la voie...
    @ +

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Je crois que je vais tricher différement:

    1) Depuis OnSelectCell, je supprime les lignes vides en trop (je n'en laisse qu'une)
    2) Toujours depuis OnSelectCell, si on entre dans une ligne vide, alors j'en crée une autre vide (InsertRow)
    3) Je supprime comme ça l'utilisation de OnStringsChange que je n'utilisais que pour celà

    Ca semble fonctionner

    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
    void __fastcall TForm1::ValueListEditor1SelectCell(TObject *Sender,
          int ACol, int ARow, bool &CanSelect)
    {
     
      bool oneIsOk=false;
      int  count=0;
      for (int i=0;i<ValueListEditor1->RowCount;++i) {
        if (ValueListEditor1->Cells[ACol][i].IsEmpty()) {
          if (oneIsOk) {
            if (ARow>=i) ++count;
            ValueListEditor1->DeleteRow(i);
          }
          oneIsOk=true;
        }
      }
     
      if (count) {
        ValueListEditor1->Row=ARow-count;
        CanSelect=false;
        return;
      }
     
      AnsiString currentContent=ValueListEditor1->Cells[ACol][ARow];
      if (currentContent.IsEmpty()) ValueListEditor1->InsertRow("New","",true);
     
    }

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

Discussions similaires

  1. Requête d'ajout crée une ligne vide
    Par Diem75 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 06/08/2009, 21h45
  2. Ajouter une ligne vide éditable à une jTable
    Par RouRa22 dans le forum Composants
    Réponses: 6
    Dernier message: 29/01/2009, 16h49
  3. Ajouter une ligne vide dans un datagrid
    Par aallal dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/10/2008, 12h30
  4. une ligne vide s'ajout automatiquement sur un datagrid
    Par tsdia2 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/06/2008, 18h54
  5. [C#]Comment ajouter une ligne vide a un datalist ?
    Par rfaouzi dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/11/2006, 10h34

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