2011-08-13 48 views
1

Im將這個簡單的程序從VB轉換到C#它更新,顯示,創建和刪除一個小訪問數據庫中的項目。 Bellow是VB中的PopulateListBox()函數,它遍歷數據集中的每一行,並查看它是否被刪除,沒有被刪除或有錯誤。我在線 lstAlbums.Items.Add(item); 和 lstAlbums.Items.Add(delitem); 現在我意識到這些字符串是未分配的,所以我加了 string item =「」; string delitem =「」;項目將不會添加到列表框

然後當我開始程序時,它將填充列表框中的每一個第二項與一個空行。

我該如何克服這種情況?提前謝謝任何人如何能幫助我。

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); 
     } 

回答

0

你錯過了開啓和關閉在if聲明牙套{},這樣的聲明緊隨if的語句,如果條件匹配,之後的語句總是執行執行。

在VB.NET你if聲明類似於此:

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

把這種對C#和正確執行兩行代碼,你應該使用大括號:

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

您當前的翻譯實際上看起來像這樣:

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

換句話說第2秒總是執行。總是在括號內放置多個語句以避免這種意外情況是一種很好的做法。

你的代碼改成這樣:

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

謝謝我不知道在c#中,如果語句=] – Zac

+0

@Zac:不用客氣。澄清一下,如果你只打算執行一條語句,你不需要它們。對於多語句你確實需要它們。即使存在一條語句,始終使用它們也更清潔,以便清楚地知道條件會導致什麼情況,並防止類似錯誤的發生。 –

+0

是的,我明白了。常見的錯誤,我從VB到C#沒有票據發出。再次感謝 – Zac

1

在你的代碼中有更多的則是上線如果條件。我認爲那會給你造成一個問題。因此,請首先將您的代碼包含在{}之間,這取決於,如果條件爲則請檢查它。