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 :

Infragistics : dropdown personnalisé par ligne dans un ultrawebgrid


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Infragistics : dropdown personnalisé par ligne dans un ultrawebgrid
    Bonjour,

    Je suis relativement amateur en DotNet, mais on me demande de faire une chose assez particulière...

    Dans un UltraWebGrid, une des colonnes est sensée contenir une dropDownList pour pouvoir mettre à jour les valeurs. La liste est générée depuis la base de données.

    Jusque la, ce serait simple. Seulement, dans mon ultragrid, d'une ligne à l'autre, les valeurs proposées par les dropdown, peuvent différer, selon la valeur d'une des cellules de la ligne.

    Il se pose cependant un problème, c'est que les liste de valeurs pour la dropdown sont liées à la colonne entière. Voici mon code actuel, qui remplit la dropdown :

    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
     
        Protected Sub dgrdProduct_InitializeRow(ByVal sender As Object, ByVal e As _
                Infragistics.WebUI.UltraWebGrid.RowEventArgs) Handles dgrdProduct.InitializeRow
     
            Dim ds As ApprovalData = _
                Facade.Approval.GetCheckValueDescriptionByCheckValueTypeCode(e.Row.Cells.FromKey(KeyColumnValueTypeCode).Value.ToString)
     
            With e.Row.Cells.FromKey(KeyColumnValue).Column.ValueList
                .DataSource = ds
                .DisplayMember = ValueDescription
                .ValueMember = ValueDescription
                .DataBind()
            End With
     
        End Sub
    Sauf que comme dans ce cas, je lie le datasource à la colonne, toutes mes lignes ont la même liste de choix. (le code fonctionne en dehors du comportement que je voudrais)

    On m'a parlé d'essayer de charger toutes les données nécessaires dans la dropdown indépendamment du contenu de la cellule de référence, et ensuite de faire un filtre dessus... Mais j'avoue que je suis totalement perdu sur comment m'y prendre...

    Pour plus de clarté, voici à quoi devrait ressembler le résultat :

    ===============
    Column Value
    ===============
    (Ligne 1 Dropdown, reference value = 1)
    - Yes
    - No
    ===============
    (Ligne 2 Dropdown, reference value = 2)
    - Abcd
    - Efgh
    - Ijkl
    ===============
    (Ligne 3 Dropdown, reference value = 1)
    - Yes
    - No
    ===============

    La reference value étant donc la valeur de la cellule de la colonne KeyColumnValueTypeCode.

    D'avance merci !

  2. #2
    Membre actif
    Homme Profil pro
    Développeur ASP.Net - disponible pour des missions
    Inscrit en
    Septembre 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur ASP.Net - disponible pour des missions

    Informations forums :
    Inscription : Septembre 2008
    Messages : 151
    Points : 213
    Points
    213
    Par défaut
    voici un début de réponse
    en javascript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function UltraWebGrid1_BeforeCellUpdateHandler(gridName, cellId, value)
    {
    	/// tester ici le nom de la cellule, si c'est pas le combo on sort
     
    	var row = igtbl_getRowById(cellId); /// ligne de la grille
    	var reference_value = row.getCellFromKey("reference_value").getValue(); /// valeur de la cellule de référence
    	row.getCellFromKey("lecombo").selectWhere('value=' + reference_value); /// ici tu mets ta condition		
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    J'ai avancé quelque peu dans mon problème, ce qui donne ceci :

    Pour le code VB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <System.Web.Services.WebMethod()> _
            Public Shared Function fillValueList(ByVal valueTypeCode As String) As String
            Return Convert.ToString( _
                Facade.Approval.GetCheckValueDescriptionByCheckValueTypeCode(valueTypeCode))
        End Function
    Cette fonction va récupérer les valeurs possibles dans la base de données pour la dropdown.

    Pour le code javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        function dgrdProduct_BeforeCellUpdateHandler(gridName, cellId) {
            //alert("test");
            var col = igtbl_getColumnById(cellId);
     
            if (col.Key != "Value")
                return;
     
            var row = igtbl_getRowById(cellId);
            var vlist = new Array();
            vlist = PageMethods.fillValueList(row.getCell(2).getValue());
            col.ValueList = vlist;
        }
    Après quelques tests, il se trouve que la valeur de la cellule est bien retrouvée dans cette partie vlist = PageMethods.fillValueList(row.getCell(2).getValue()); mais aucun appel n'est fait à la fonction correspondante en VB. La méthode n'est visiblement pas appelée...

    J'ai un scriptmanager dans la master page de mon application et le code ci-dessous est appelé dans un container.

    Une idée quelqu'un ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Travaillant encore dessus, je viens poser plus d'informations sur mon problème... Quand le javascript se lance, j'ai l'erreur suivante qui apparait :

    Unknown web method fillValueList. Parameter name: methodName
    Voici le contenu du code de mes différentes pages :

    MasterPage.aspx (celle qui soutient toutes les autres qui se chargent dans un container)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" EnablePartialRendering="true"></asp:ScriptManager>
    maPage.aspx (javascript)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        function dgrdProduct_BeforeCellUpdateHandler(gridName, cellId) {
     
                    var col = igtbl_getColumnById(cellId);
     
                    if (col.Key != "Value")
                         return;
     
                    var row = igtbl_getRowById(cellId);
                    var reference = row.getCellFromKey("Value_Type_code").getValue();
                    var releaseCode = row.getCellFromKey("Exceptional_Release_Type_Code").getValue();
     
                    var listOfValues = PageMethods.fillValueList(reference, releaseCode,successCallback,failCallback,null);
    ...
    }
    maPage.aspx.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Web.Services
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        <WebMethod()> _
            Public Shared Function fillValueList(ByVal valueTypeCode As String, _
                    ByVal exceptionalReleaseTypeCode As String) As String()
     
            Dim dsResult(10) As String
            Dim counter As Integer = 0
     
            For Each value As String In dsResult
                value = "test"
            Next
     
            Return dsResult
        End Function
    (Le code de la fonction est un code de test, mais de toute facon il n'est pas exécuté)

    web.config (ligne rajoutée dans httpModules)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    J'ai beau regarder les exemples sur le web, notamment celui la http://www.geekzilla.co.uk/View7B75C...3138DFC671.htm , mais pas moyen... Ca commence à sentir l'informatique quantique cette histoire...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Solution trouvée avec l'aide d'un collègue.. Mais il fallait vraiment s'accrocher...

    On a découvert que la redirection vers la page était faite via un Server.Transfer au lieu d'un Response.Redirect... Donc du coup, visiblement, cela devait créer un conflit avec le scriptmanager ou autre chose (raison exacte indéterminée).

    Donc, le cas est résolu.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/06/2007, 19h56
  2. Comment définir une couleur par ligne dans un objet uicontrol de type Text
    Par VinceDA dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/05/2007, 12h13
  3. lire ligne par ligne dans un stream
    Par zolive dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 05/02/2007, 08h31
  4. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09

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