2010-09-25 8 views
1

J'ai une donnée dynamique, créée à partir d'une base de données. Je veux ajouter une nouvelle ligne (vide), donc il y a une option pour ne rien choisir dans un combobx. Tout fonctionne bien sans ajouter la nouvelle ligne. Mais quand j'ajoute une nouvelle ligne, la combobox n'affiche rien. Qu'est-ce que je rate?Ajouter une nouvelle ligne à une donnée dynamique existante

Voici le code

Dim DT As New DataTable 

DT = DS.Tables("CallStatus") 
Dim drNewRow As DataRow = DT.NewRow 

'Add new row 
drNewRow.Item("CampaignCallStatusID") = "" 
drNewRow.Item("CampaignCallStatus") = "" 
DT.Rows.Add(drNewRow) 
DT.AcceptChanges() 

'Fill combobox 
With cboCallStatus 
    .DataSource = DT 
    .DisplayMember = "CampaignCallStatus" 
    .ValueMember = "CampaignCallStatusID" 
End With 

Répondre

4

J'ai trouvé une solution. J'ai utilisé la méthode InsertAt, et plased la ligne dans le haut.

Dim DT As New DataTable 
DT = DS.Tables("CallStatus") 
Dim drNewRow As DataRow = DT.NewRow 
DT.Rows.InsertAt(drNewRow, 0) ' <== This is the solution 
DT.AcceptChanges() 

With cboCallStatus 
    .DataSource = DT 
    .DisplayMember = "CampaignCallStatus" 
    .ValueMember = "CampaignCallStatusID" 
End With 
cboCallStatus.Refresh() 
+0

Voulez-vous s'il vous plaît ranger le code source pour la démarque. –

+0

Est-ce que la solution est InsertAt() ou est-ce cboCallStatus.Refresh()? Vous n'aviez pas cela dans votre question initiale. –

+0

La solution est InsertAt() – Troels

0

Dans votre exemple, le CampaignCallStatus pour la ligne vide est vide donc l'affichage dans la zone de liste déroulante sera vide. Si vous pensez que l'une des valeurs de la base de données doit s'afficher dans l'enregistrement que vous affichez actuellement, remplacez la ligne vide CampaignCallStatus par une valeur (disons Debug) pour confirmer que la ligne vide est affichée.

La raison pour laquelle la ligne vide est affichée dans la zone de liste déroulante est probablement due au fait que CampaignCallStatusID n'est pas du même type que le type de base de données pour CampaignCallStatusID. Essayez de changer la valeur de ligne vide de "" à 0.

+0

Merci pour les réponses. J'ai trouvé la solution. – Troels

+0

Merci. J'ai essayé. N'a pas travaillé. – Troels

0

Vous pouvez essayer de parcourir toutes les lignes désirées et de les ajouter manuellement à la zone de liste déroulante.
Un exemple est la suivante:

ComboBox.Items.Clear() 
For Each dr as DataRow in DT.Rows 
    ComboBox.Items.Add(dr("col1").ToString()) 
Next 

Ceci est garanti pour fonctionner lorsque la liaison de données échoue.

Questions connexes