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

ASP.NET Discussion :

DropDownList dans un GridView avec contenu spécifique


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Par défaut DropDownList dans un GridView avec contenu spécifique
    Bonjour;

    Eh oui un n.ième cas de liste déroulante dans un GridView ...
    Petite spécificité : la liste déroulante présente sur chaque ligne du tableau doit avoir un contenu distinct ... et je galère là-dessus.

    Avant de décrire mon pb, voici mon modèle de données (3 tables), qui permet de gérer des droits d'accès utilisateur à nos différentes applications :

    Table GNAppz : table contenant nos différentes applis
    - id (clef primaire)
    - name

    Table GNLevels : table contenant les niveaux d'accès possibles pour chaque appli (chacune ayant un nombre de niveaux possibles différents)
    - appid (clef étrangère provenant de GNAppz.id)
    - applevel (niveau d'accès pour cette appli)
    - applabel (libellé de l'accès pour cette appli et ce niveau )
    Clef aggrégée : [appid,applevel]

    Exemple de valeurs pour l'appli d'id 1 :
    (1,0,'Consultation')
    (1,1,'Edition')
    (1,2,'Administration')

    Table GNRights : droits des utilisateurs pour chaque appli
    - ipn (identifiant utilisateur unique)
    - appid
    - applevel
    Clef aggrégée : [ipn,appid]

    Bon maintenant, mon pb :

    J'ai une permière combo qui me permet de sélectionner un user.
    Dans mon GridView, j'affiche le droit actuel de l'utilisateur pour chaque appli (ça, ça marche). Par contre, quand je passe en édition sur la ligne d'une appli, je n'arrive pas à populer le dropdown avec la liste des droits possibles pour cette appli En plus, il faudrait que la valeur sélectionnée du dropdown soit bien celle dudit utilisateur ... Bref je galère (depuis des jours ! )

    Voici mon code :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
        <form id="form1" runat="server">
    
            <!-- Définition des DataSources -->
    
            <asp:SqlDataSource ID="UsersDS" runat="server" ConnectionString="<%$ ConnectionStrings:SMU_DEVConnectionString %>" SelectCommand="SELECT firstname + ' ' + lastname as name, ipn FROM XRUserInfo WHERE ipn IN (SELECT DISTINCT ipn FROM GnRights) ORDER BY lastname, firstname"></asp:SqlDataSource>
    
            <asp:SqlDataSource ID="AccesDS" runat="server" ConnectionString="<%$ ConnectionStrings:SMU_DEVConnectionString %>" 
                SelectCommand="SELECT DISTINCT [applabel] FROM [GNLevels] WHERE ([appid] = @appid)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="UserAppsGridView" Name="appid" 
                        PropertyName="SelectedValue" Type="Int32" />
                </SelectParameters>
            </asp:SqlDataSource>
    
            <asp:SqlDataSource ID="UserAppsDS" runat="server" 
                ConnectionString="<%$ ConnectionStrings:SMU_DEVConnectionString %>" 
                SelectCommand="SELECT id as 'appid',name, GNLevels.applabel
                               FROM GNAppz
                               INNER JOIN GNLevels ON GNLevels.appid = GNappz.id
                               INNER JOIN GNRights ON (GNRights.appid = GNAppz.id AND GNRights.applevel = GNLevels.applevel AND GNRights.ipn=@ipn)
                               ORDER BY id
                               " 
                UpdateCommand="UPDATE [GNRights] SET [applevel] = @applevel WHERE [ipn] = @ipn AND [appid] = @appid">
                <SelectParameters>
                    <asp:ControlParameter ControlID="UsersDropDown" Name="ipn" PropertyName="SelectedValue" Type="String" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="applevel" Type="Int32" />
                    <asp:Parameter Name="ipn" Type="String" />
                    <asp:Parameter Name="appid" Type="Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
    
            <!-- Définition de l'interface -->
    
            <asp:DropDownList ID="UsersDropDown" runat="server" DataSourceID="UsersDS" DataTextField="name" DataValueField="ipn" AutoPostBack="True"></asp:DropDownList>
            
            <br /><br />
            
            <asp:GridView ID="UserAppsGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="appid" DataSourceID="UserAppsDS">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="appid"   HeaderText="appid"   ReadOnly="True" SortExpression="appid" InsertVisible="False" />
                    <asp:BoundField DataField="name" HeaderText="name" ReadOnly="True" SortExpression="name" />
                    
                    <asp:TemplateField HeaderText="applabel" SortExpression="applabel">
                        <EditItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="AppDS" DataTextField="applabel" DataValueField="applevel"></asp:DropDownList>
                            <asp:SqlDataSource ID="AppDS" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:SMU_DEVConnectionString %>" 
                                SelectCommand="SELECT applabel,applevel FROM GNLevels WHERE appid = 1">
                                <SelectParameters>
                                    <asp:ControlParameter ControlID="UserAppsGridView" Name="appid" PropertyName="SelectedValue" />
                                </SelectParameters>
                            </asp:SqlDataSource>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("applabel") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    
                </Columns>
            </asp:GridView>
    
        </form>
    Pas glop ... Une idée ?

    Merci à tous/toutes

    Olivier

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Par défaut
    Tu peux utiliser l'événement OnItemDataBound du grid view pour y manipuler dynamiquement tes contrôles ou même les ajouters à ta guise dans chacune de tes cellules.

    Peut-être que c'est deux liens pourront te donner un coup de pouce

    http://www.codeproject.com/KB/webfor...avigation.aspx

    http://www.codeproject.com/KB/aspnet...=2987975&fr=26

    Bien entendu il ne s'agit pas exactemen d'ajout de drop down mais en utilisant le même genre de stratégie tu peux créer dynamiquement pour chacune de tes lignes les combo avec la liste de choix désirée.

    J'ai créé une grille dynamique dans le même sens ou chacune des cellules pour chacune des lignes à un contenu différent et cela fonctionne très bien.

    Attention!!! Si tu prévois avoir beaucoup de dropdown dans une même page ceci pourrait prendre un certains temps de chargement par contre l'autre option un peu plus complexe, serait qu'au clique dans la cellule par l'utilisateur tu aie mettre la bonne liste dans la cellule avec les choix qui correspondent ceci demande un peu plus de temps par contre et beaucoup de javascript.

    J'espère que cela te sera utile!!

    Stroumfs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Par défaut
    Merci à toi, je vais voir cela de ce pas !!

Discussions similaires

  1. Insérer une DropDownList dans une GridView
    Par Delphi-ne dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/05/2009, 09h15
  2. [ASP.NET][C#2] Ajout d'un dropdownlist dans un gridview
    Par Mouns007 dans le forum ASP.NET
    Réponses: 20
    Dernier message: 11/05/2009, 12h32
  3. Inclure une dropdownlist dans un gridview
    Par Delphi-ne dans le forum ASP
    Réponses: 1
    Dernier message: 31/08/2007, 10h41
  4. Réponses: 5
    Dernier message: 06/08/2007, 17h43
  5. Réponses: 2
    Dernier message: 27/05/2006, 18h26

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