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

VB.NET Discussion :

Positionnement dans un datagridview


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut Positionnement dans un datagridview
    Bonjour,

    Je n'arrive à me positionner dans une cellule déterminée d'un DataGridView

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonGrid.Rows(5).Cells(5).Selected = True
    Cette ligne de code fonctionne nickel dans la procédure Load de la Form.
    Mais ne fonctionne pas du tout dans la procédure CellValueChanged du DataGridView. Je n'ai aucune erreur à l'éxecution

    FikoU

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    Je voit que le DataGridView reste un mystère pour beaucoup
    FikoU

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    .cells.selected sert à définir si la cellule est selectionnée ou non
    il suffit de chercher et en moins d'une minute on trouve .FirstDisplayedScrollingRowIndex

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    Salut sperot51 et merci pour ta réponse,

    Cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonGrid.FirstDisplayedCell = Me.MonGrid.CurrentCell
    Dans le FormLoad se positionne sur sur Row(0).Cell(0)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonGrid.FirstDisplayedCell = Me.MonGrid.Item(e.RowIndex, e.ColumnIndex)
    Dans CellValidating se positionne dans la cellule suivante

    J'ai fait des recherches mais sur select ou autre, en géneral je trouve que rarement ce que je cherche dans l'aide vb.net.

    Ce que j'aimerai après une validation de sasie erronée me repositionner dans la cellule (dans tout les cas la cellule selectionnée est la suivante)

    A l'ffichage au lancement de la Form j'aimerai dans la cellule afficher le curseur de saisie.

    Merci d'avance.

    FikoU

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    Ce coup ci je crois avoir tout essayé :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MonGrid.FirstDisplayedCell = Me.MonGrid.Item(e.RowIndex, e.ColumnIndex)''La cellule active ne peut pas être paramétrée en tant que cellule invisible
    MonGrid.FirstDisplayedCell = Me.MonGrid.CurrentCell '' ne plante pas mais ne sert à rien
    Me.MonGrid.CurrentCell = Me.MonGrid.Item(e.RowIndex, 5)''La cellule active ne peut pas être paramétrée en tant que cellule invisible
    Me.MonGrid.CurrentCell = MonGrid.Item(e.RowIndex, e.ColumnIndex) ''La cellule active ne peut pas être paramétrée en tant que cellule invisible
    Me.MonGrid.CurrentCell.Selected = True '' ne plante pas mais ne sert à rien
    MonGrid.Item(MonGrid.CurrentRow.Index, 5).Selected = True ''La cellule active ne peut pas être paramétrée en tant que cellule invisible
    Je rappel que ce code se trouve dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub mongrid_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles MonGrid.CellValidating
    Bon ben voila @+ FikoU

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et FirstDisplayedScrollingRowIndex tu l'as essayé ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MonGrid.FirstDisplayedScrollingRowIndex = e.RowIndex
    ça ne marche pas mais cela ne plante pas.

    Tu est sur car l'aide me dit : Obtient ou définit l'index de la ligne qui est la première ligne affichée sur le DataGridView.

    Ce que je veut c'est après avoir traité une erreur dans Validatig me erpositionner dans la cellule ou l'eereur c'est produite. La cellule selectionné est sytematiquement la suivante. ?????

    FikoU

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    j'en ai aucune idée, moi je l'utilise pas en automatique le datagridview ^^

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    Je ne pense pas être en automatique !!!!
    J'ai peut être oublié un paramètre lors de l'initialisation ??


    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
    ''remplis le DataGridView
            Me.MonGrid.DataSource = Cl25m_DataSet
            Me.MonGrid.DataMember = tabConcours(NomTable)
            ''Empêche l'utilisateur de redimensionner la largeur des colonnes
            Me.MonGrid.AllowUserToResizeColumns = False
     
            ''colorise le texte de la ligne 1
            Me.MonGrid.Rows(0).DefaultCellStyle.ForeColor = Color.Blue
     
            ''Affiche la valeur de la cellule indiquée
            'Label1.Text = Me.MonGrid.Rows(0).Cells(14).Value.ToString().Equals("True")
     
            Me.MonGrid.ColumnHeadersDefaultCellStyle.Font = New Font(Me.MonGrid.Font, FontStyle.Bold)
     
            Me.MonGrid.ColumnHeadersDefaultCellStyle.BackColor = Color.Red
     
            ''Masque affiche une colonne colonne OK pour le traitement
            Me.MonGrid.Columns(0).Visible = False
            With Me.MonGrid
                .Width = 513
                .Height = 265
                '.Columns(0).Width = 120
                .Columns(1).Width = 120
                .Columns(2).Width = 100
                .Columns(3).Width = 95
                .Columns(4).Width = 65
                .Columns(5).Width = 90
                ''Titre de la colonne
                .Columns(1).HeaderText = "Nom"
                .Columns(2).HeaderText = "Prénom"
                .Columns(3).HeaderText = "Date Naiss"
                .Columns(4).HeaderText = "Licence"
                .Columns(5).HeaderText = "Pas de Tir"
                .Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                ''fige la colonne 1
                .Columns(1).Frozen = True
                'Label1.Text = Me.MonGrid.Rows(0).Cells(0).Value.ToString()
     
                .Columns(1).ReadOnly = True
                .Columns(2).ReadOnly = True
                .Columns(3).ReadOnly = True
                .Columns(4).ReadOnly = True
                .Columns(5).ReadOnly = False
                .SelectionMode = DataGridViewSelectionMode.CellSelect 'FullRowSelect
                .MultiSelect = False
     
            End With
            With Me.MonGrid.DefaultCellStyle
                .Font = New Font("Tahoma", 8)
                .ForeColor = Color.Blue
                .BackColor = Color.White
                .SelectionForeColor = Color.Red
                .SelectionBackColor = Color.AliceBlue
            End With
     MonGrid.Rows(0).Cells(5).Selected = True

    FikoU

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    quand je dis que je l'utilise pas en automatique, c'est que c'est moi meme qui gère les données, (virtualmode = true) (pas de dataset)
    et aussi que je gère les modifications ailleurs, pas directement dans le grid
    et je fais les requetes d'update à la volée par le code aussi


    sinon ca fait fouilli est c'est lent ...

    au début j'ai essayé avec un dataset, pour 30000 lignes, l'appli était bloquée pendant 30 secondes au moins
    maintenant le grid est rempli (au moins partiellement) et utilisable en une demie seconde

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2002
    Messages : 314
    Points : 99
    Points
    99
    Par défaut
    Re,
    Te en as trop dit ou pas assez, cela m'intéresse vivement ton truc, pas pour l'appli en cour pas envie de recommencer mais pour le futur.

    Tu rempli ton grid comme ça :

    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
    ''Tous les champs Tireurs + Id et nom Societe
            sGrilleTireurs = "T_Nom, T_Prenom, T_Licence,  T_DateNaiss, T_Npa, T_Localite, " & _
                  "S_NomSociete, T_IdTireur, T_IdSociete, S_IdSociete "
     
            sStrSql = "SELECT " & sGrilleTireurs & "FROM Societe S, Tireurs T WHERE S.S_IdSociete = T.T_IdSociete " & _
                    "ORDER BY T_Nom, T_Prenom"
            OuvreBase(sStrSql, "cl25m.mdb", "Tireurs")
     
            ''INIT GRID SELECTION TIREURS
            ''Ajoute ue ligne le DataGridView
            dgvTireurs.ColumnCount = 9
            For i = 0 To Cl25m_DataTable.Rows.Count() - 1
                dgvTireurs.Rows.Add(Cl25m_DataTable.Rows(i).Item("T_nom"), Cl25m_DataTable.Rows(i).Item("T_Prenom"), _
                Cl25m_DataTable.Rows(i).Item("T_Licence"), Cl25m_DataTable.Rows(i).Item("T_DateNaiss"), _
                Cl25m_DataTable.Rows(i).Item("T_Npa"), Cl25m_DataTable.Rows(i).Item("T_Localite"), _
                Cl25m_DataTable.Rows(i).Item("S_NomSociete"), Cl25m_DataTable.Rows(i).Item("T_IdTireur"), _
                Cl25m_DataTable.Rows(i).Item("T_IdSociete"))
            Next
     
    With Me.dgvTireurs
                .Columns(2).Width = 55
                .Columns(3).Width = 85
                .Columns(4).Width = 45
                .Columns(5).Width = 131
                .Columns(6).Width = 200
                .Columns(0).HeaderText = "Nom"
                .Columns(1).HeaderText = "Rrénom"
                .Columns(2).HeaderText = "Licence"
                .Columns(3).HeaderText = "Date Naiss"
                .Columns(4).HeaderText = "Npa"
                .Columns(5).HeaderText = "Localitél"
                .Columns(6).HeaderText = "Société"
                .Columns(7).Visible = False ''T_IdTireur
                .Columns(8).Visible = False ''T_IdSociete
                .Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .MultiSelect = False
                ''Empêche l'utilisateur de redimensionner la largeur des colonnes
                .AllowUserToResizeColumns = False
                .RowsDefaultCellStyle.BackColor = Color.White
                .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
     
            End With
    Je me sert de ce code pour faire une liste à 2 entrées

    @+FikoU

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    hein ?

    enfin moi je rempli le datagridview avec un datatable d'un dataview avec un datareader sur un thread séparé ^^
    avec datagrid.columns.add pour chaque champ, en fonction du getschematable du reader
    et ensuite tu while reader.read add pour ajouter sur dataview.table (le datatable)

    enfin le datagridview est pas vraiment rempli puisque virtualmode est à true
    il me demande les données à afficher ...

    ensuite le dataview permet de faire des recherches ou de changer l'ordre instantannément ou presque sans refaire d'accès au données


    enfin la contradiction de microsoft c'est qu'il font un framework hyper détaillé, enfin très haut niveau avec des objets pour tout faire simplement
    mais c'est tellement lent qu'on est obligé de tout redévelopper pour faire des objets de meme niveau mais rapides ...
    ils auraient pu le faire à notre place !

    en esperant que les prochains framework seront hardware accelerated ... parce que le langage est plutot agréable à manier

  13. #13
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Salut fikou, je ne sais pas si je saisi bien ton problème, mais je vais essayé de le résumé. Tu voudrais que lors de l'événement validating, si la valeur saisie dans la cellule n'est pas valide, que la cellule reste sélectionnée pour signifier à l'utilisateur que la valeur entrée n'est pas la bonne ?

    Simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If taValeurEstInvalide Then
        e.Cancel = true
    End If
    Ça indique à ton logiciel de ne pas quitter la cellule, car la validation a échoué.

    Voici un bout de code d'un truc que je développe (en C#)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (!double.TryParse(e.FormattedValue.ToString(), out temp))
    {
        // Le tag de la colonne contient le message d'erreur à afficher (facultatif)
        dtgItems.Rows[e.RowIndex].ErrorText = dtgItems.Columns[e.ColumnIndex].Tag.ToString();
     
        e.Cancel = true;
    }

Discussions similaires

  1. [C#] Comment se positionner dans un DataGridview
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/05/2006, 12h45
  2. Positionnement dans une arborescence en Excel VBA
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/11/2005, 19h10
  3. [VB6] Pb positionnement dans MsFlexGrid
    Par Jap dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/09/2005, 22h56
  4. Réponses: 9
    Dernier message: 16/05/2005, 17h43
  5. forcer le curseur à ce positionner dans une zone texte
    Par caton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/04/2005, 14h17

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