2010-09-08 1 views
2

Edit: plus de codeComment obtenir mon menu déroulant par défaut au premier nom de la ligne dans le tableau

Dim oControl As New Forms.Control() 

          Using types As New DataSet 
           With oDal 
            .Parameters.Clear() 
            .Execute(sql, types) 
           End With 
           With ddlType 
            .DataSource = types.Tables(0) 
            .DataTextField = "Name" 
            .DataValueField = "TypeId" 
            .Items.Clear() 
            .DataBind() 
            If .Items.Count > 0 Then 
             .SelectedIndex = 0 
            End If 
           End With 

          End Using 
          'set queue type with our asp:dropdownlist control 
          oControl = New Forms.Control(Forms.Control.ControlType.ComboBox) 
          'we need to connect the two controls 
          oControl.Id = ddlType.ID 

          'add it to the grid 
          With .Columns.Add("CredentialTypeId", "Type", 85) 
           .Editor = oControl 
          End With 

Pour une raison quelconque lorsque vous cliquez sur le menu déroulant - « 0 » est affiché en défaut. Il doit être la première paire texte/valeur de la table. La table retourne seulement une rangée pour le moment, ce qui est correct, mais 0 reste par défaut.

Quelqu'un sait pourquoi?

+0

Je suis confus comment peut-il par défaut à 0 si un seul enregistrement est retourné? Cet enregistrement est-il égal à 0? Y at-il plus de code que nous ne voyons pas? – VoltaicShock

+0

L'enregistrement n'est pas égal à zéro. Je n'ai aucune idée de pourquoi cela se passe. C'est presque comme si le '0' était ajouté au menu déroulant en tant que premier élément et qu'il devenait le paramètre par défaut. J'ai essayé de régler manuellement la valeur par défaut sur item (0), qui n'a rien fait, et item (1), qui a erré. – Scott

+0

Ouais j'ai habituellement une méthode qui ajoute une valeur par défaut à la liste déroulante donc j'ai quelque chose à tester avec pour voir si l'utilisateur a choisi quelque chose. – VoltaicShock

Répondre

1
With ddlType 
    .DataSource = types.Tables(0) 
    .DataTextField = "Name" 
    .DataValueField = "TypeId" 
    .DataBind() 
    If .Items.Count > 0 Then 
     .SelectedIndex = 0 
    End If 
End With 

Modifier:
Compte tenu de vos résultats et vos commentaires, je pense que ce soit vos types table est vide ou votre code n'est pas en cours d'exécution. Essayez d'ajouter des points d'arrêt et de tester certaines valeurs.

types.Tables(0) isnot nothing 
types.Tables(0).Rows.Count 

Edit2:
En regardant votre code, je vois un autre problème. Vous ne remplissez jamais oControl. Je ne sais pas pourquoi vous créez un contrôle complètement nouveau et définissez son ID à l'ID de ddlType. Pourquoi ne faites-vous pas votre databind avec oControl? Ou attacher ddlType à votre grille?

+0

Pour une raison quelconque, cela ne fonctionne pas. C'est ce que j'ai essayé en premier. Le ddl est dans une grille ExtJS si cela fait une différence. Le DDL est en fait une colonne. – Scott

+0

La table contient des données. la liste déroulante devient {0, firstElement}. Je veux juste qu'il affiche firstElement au lieu de 0, et je n'ai AUCUNE IDEE comment le 0 arrive même là en premier lieu. – Scott

+0

Vous étiez sur la bonne voie. Ma faute. J'ai suivi votre processus de réflexion et finalement trouvé que lorsque la nouvelle ligne a été insérée, une méthode javascript était en cours d'exécution et pour une raison quelconque CHANGER le typeId ramené de la base de données à la première. Code incorrect =/ – Scott

0

Je sais que cela ne marchera probablement pas mais je vais le dire quand même.

Avez-vous essayé d'effacer tous les éléments avant de lier les données?

ddType.Items.Clear(); 
+0

Ne fonctionne pas = / – Scott