2011-08-13 3 views
1

En convertissant ce simple programme de vb en C# il met à jour, affiche, crée et supprime des éléments d'une petite base de données d'accès. Ci-dessous est la fonction PopulateListBox() dans VB il passe par chaque ligne de l'ensemble de données et voir si elle est supprimée, non supprimée ou a des erreurs. J'obtiens ici 2 erreurs sur les lignes lstAlbums.Items.Add (item); et lstAlbums.Items.Add (delitem); maintenant je me rends compte que les chaînes ne sont pas assignées donc j'ai ajouté string item = ""; chaîne delitem = "";Item wont add to list box

puis lorsque je lance le programme, il remplit chaque deuxième élément de la zone de liste avec une ligne vide.

Comment puis-je surmonter cette situation? merci d'avance à tous ceux qui peuvent m'aider.

private void PopulateListBox() 
    { 
     string item; 
     string delitem; 
     //clear the list box 
     lstAlbums.Items.Clear(); 

     //access each row in the data set table 

     foreach (DataRow row in myDataSet.Tables["albums"].Rows) 
     { 
      //list the nondeleted rows 
      if (!((row.RowState & DataRowState.Deleted) == DataRowState.Deleted)) 
       item = row["albumCode"] + ", " + row["AlbumTitle"] + ", " +        row["ArtistCode"]; 
        //list rows with update errors 
        if (row.HasErrors) 
        item = "(**" + row.RowError + "**)"; 
       lstAlbums.Items.Add(item); 

      //list deleted rows 
      if ((row.RowState & DataRowState.Deleted) == DataRowState.Deleted) 
       delitem = row["albumCode", DataRowVersion.Original] + ", " 
        + row["AlbumTitle", DataRowVersion.Original] + ", " 
        + row["ArtistCode", DataRowVersion.Original] + "***DELETED***"; 
      lstAlbums.Items.Add(delitem); 
     } 

Répondre

0

vous manquez l'ouverture et la fermeture des accolades { et } dans votre déclaration if, de sorte que la déclaration suivante immédiatement l'instruction if exécute si la condition correspond, et l'instruction après qui exécute toujours.

En VB.NET votre déclaration if ressemble à ceci:

If condition Then 
    ' do something 
    ' do something else 
End If 

Pour traduire en C# et exécuter correctement les 2 lignes de code que vous devez utiliser des accolades:

if (condition) 
{ 
    // do something 
    // do something else 
} 

Votre traduction actuelle en fait ressemble à ceci:

if (condition) 
    // do something (if condition is true) 
// do something else (not dependent on the condition) 

En d'autres termes, le 2ème s tatement exécute toujours. Il est recommandé de toujours inclure plusieurs instructions dans les accolades afin d'éviter de telles circonstances involontaires.

Changer votre code à ceci:

if (!((row.RowState & DataRowState.Deleted) == DataRowState.Deleted)) 
{ 
    item = row["albumCode"] + ", " + row["AlbumTitle"] + ", " +        row["ArtistCode"]; 
    //list rows with update errors 
    if (row.HasErrors) 
    { 
     item = "(**" + row.RowError + "**)"; 
    } 

    lstAlbums.Items.Add(item); 
} 

//list deleted rows 
if ((row.RowState & DataRowState.Deleted) == DataRowState.Deleted) 
{ 
    delitem = row["albumCode", DataRowVersion.Original] + ", " 
     + row["AlbumTitle", DataRowVersion.Original] + ", " 
     + row["ArtistCode", DataRowVersion.Original] + "***DELETED***"; 
    lstAlbums.Items.Add(delitem); 
} 
+0

Merci Je ne savais pas que dans C# vous aviez besoin d'accolades si les déclarations =] – Zac

+0

@Zac: de rien. Pour clarifier, vous n'en avez pas besoin si vous avez seulement l'intention d'exécuter une déclaration. Pour plusieurs instructions, vous en avez besoin. Il est plus propre de toujours les utiliser même si une déclaration existe pour que l'on sache exactement ce que la condition va entraîner et cela empêche les erreurs comme celles-ci de se faufiler sur vous. –

+0

Oui je vois. Erreur commune que je passe d'aller de VB à C# sans notes distribuées. Merci encore – Zac

1

Dans votre code il y a plus de ligne dans si la condition. Je pense que cela crée un problème pour vous. Donc d'abord inclure votre code entre {} qui dépend de si condition puis vérifiez-le.