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 :

sélection de plusieurs cellules dans une table


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut sélection de plusieurs cellules dans une table
    Bonjour,

    Je dispose d'une table de 7 colonnes et autant de lignes que je voudrais.
    Les 7 colonnes représentent chaque jour de la semaine.

    Je veux pouvoir cliquer sur une cellule et glisser ma souris avec le bouton gauche toujours enfoncé sur les autres cellules dans la même colonne.
    Les cellules se coloreraient au fur et à mesure de la sélection.

    Comment faire? J'ai fait pas mal de recherches mais rien ne m'aide...

    Merci à ceux qui maideront!

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je dispose d'une table de 7 colonnes et autant de lignes que je voudrais.
    Dans quel type de Control (ListView, DatagridView, TableLayoutPanel, ...) ?



    La solution de base consiste à :
    • sur l'event MouseDown, initaliser un état SelectionActive=true sur une cellule,
    • sur l'event MouseMove et si SelectionActive==true, "selectionner" la cellule,
    • sur l'event MouseUp, réinitaliser un état SelectionActive=false
    Le code correspondant à l'opération "sélectionner" et la gestion des couleurs dépendra du type de Control.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Déjà un grand merci pour votre aide!

    Dans quel type de Control (ListView, DatagridView, TableLayoutPanel, ...) ?
    Je ne vois pas trop ce que je peux répondre.
    Le mieux est que je vous montre ce que j'ai fait.

    Dans un ascx:
    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
     
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Day.ascx.cs" Inherits="WebApplication1.Day" %>
     
    <script type="text/javascript">
     
        function onMouseDownCasefunction() {
            document.getElementById('<%=isClickInCaseTextBox.ClientID%>').value = "true";
        }
     
        function onMouseOverCasefunction(obj) {
            if (document.getElementById('<%=isClickInCaseTextBox.ClientID%>').value == 'true') {
     
                obj.style.backgroundColor = '#FF8000';
     
                var i = parseInt(document.getElementById('<%=nbSelectCasesTextBox.ClientID%>').value);
                i = i + 1;
                document.getElementById('<%=nbSelectCasesTextBox.ClientID%>').value = i;
            }
        }
     
    </script>
     
    <table id='table1' border="2">
        <tr style="height: 30px;">
            <td style="width: 30px;" id="case1" onmousedown="onMouseDownCasefunction();onMouseOverCasefunction(this);"
                onmouseover="onMouseOverCasefunction(this);">
            </td>
        </tr>
        <tr style="height: 30px;">
            <td id="case2" onmousedown="onMouseDownCasefunction();onMouseOverCasefunction(this);"
                onmouseover="onMouseOverCasefunction(this);">
            </td>
        </tr>
        <tr style="height: 30px;">
            <td id="case3" onmousedown="onMouseDownCasefunction();onMouseOverCasefunction(this);"
                onmouseover="onMouseOverCasefunction(this);">
            </td>
        </tr>
    </table>
    <asp:TextBox ID="isClickInCaseTextBox" runat="server" Width="35px" Text='false'></asp:TextBox><br />
    <asp:TextBox ID="nbSelectCasesTextBox" runat="server" Width="35px" Text="0"></asp:TextBox>
    Et dans mon aspx:
    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
     
    <body onmouseup="onMouseUpCasefunction();">
        <form id="form1" runat="server">
        <div>
            <table>
                <tr>
                    <td>
                        <uc1:Day ID="Day1" runat="server"></uc1:Day>
                    </td>
                    <td>
                        <uc1:Day ID="Day2" runat="server"></uc1:Day>
                    </td>
                </tr>
            </table>
        </div>
        </form>
    </body>
    </html>
    Votre solution m'aide.
    Pour le up, je vais voir ça.
    J'ai un nouveau souci: comment faire en sorte que la colonne voisine ne se colore pas, même quand je sors de ma colonne à colorer?

    Un grand merci encore!

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour le type de contôle, il fallait préciser l'environnement: (WinForms, WPF, HTML/Javascript, ...)
    Pour le up, je vais voir ça.
    J'ai un nouveau souci: comment faire en sorte que la colonne voisine ne se colore pas, même quand je sors de ma colonne à colorer?
    Justement, via le up qui "désactive" les actions de l'event MouseMove.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Pour le type de contôle, il fallait préciser l'environnement: (WinForms, WPF, HTML/Javascript, ...).
    Je suis tenté de dire HTML/Javascript.

    Citation Envoyé par Graffito Voir le message
    Justement, via le up qui "désactive" les actions de l'event MouseMove.
    Oui, mais si je sors un peu de ma colonne sans avoir relaché le bouton, les cases de ma colonne voisine se colorent...
    Là est le problème...

    Sinon, pour le up en lui même, c'est ok, il fonctionne.

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Il suffit de rajouter dans le MouseMove un test pour vérifier si la cellule est dans la même colonne que la première cellule selectionnée et, si ce n'est pas le cas, désactiver la sélection comme dans le MouseUp.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Il suffit de rajouter dans le MouseMove un test pour vérifier si la cellule est dans la même colonne que la première cellule selectionnée et, si ce n'est pas le cas, désactiver la sélection comme dans le MouseUp.
    A condition que le MouseMove soit détecté avant le MouseHover dans la nouvelle cellule...
    Je testerai quand j'aurai un peu de temps, là je bloque sur les id.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 343
    Points : 129
    Points
    129
    Par défaut
    Bon finallement, ce que j'ai fait, c'est que j'ai rajouté des colonnes bidons entre mes colonnes utilisées.

    J'ai mis un onmouseover sur les colonnnes bidons, qui met à false mon élément SelectionActive.
    C'est pas génial car si la souris passe vite par dessus ces colonnes, mon élément SelectionActive reste à true.
    Mais c'est mieux que rien en attendant...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2012, 20h18
  2. [Toutes versions] Problème sélection de plusieur cellule dans un Spreadsheet situer dans une Userform
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/05/2010, 11h57
  3. [SQL] calcul de plusieurs variables dans une table
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2006, 21h53
  4. [CSS]probleme de style sur cellules dans une table
    Par luimême dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 17/01/2006, 12h13
  5. Réponses: 8
    Dernier message: 15/07/2005, 14h23

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