2011-08-13 5 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 문이 실행 다음과 같습니다.

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

는 C#을 해당 번역하고 제대로 중괄호를 사용한다 코드의 2 개 라인을 실행하려면 :

은 VB.NET에 if 문은 다음과 유사

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

현재 번역 실제로 다음과 같습니다.

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

즉 두 번째 s 문신은 항상 실행됩니다. 이러한 의도하지 않은 상황을 피하기 위해 항상 여러 문장을 중괄호 안에 넣는 것이 좋습니다.

이에 코드를 변경

: 코드에서

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#에서는 if 문 = 주위에 중괄호가 필요하다는 것을 알지 못했습니다.] – Zac

+0

@Zac : 오신 것을 환영합니다. 명확하게하기 위해 하나의 명령문 만 실행하려는 경우에는 필요하지 않습니다. 여러 문장의 경우 필요합니다. 하나의 문장이 존재하더라도 조건을 정확히 명확히 나타내주기 때문에 항상이 문장을 사용하는 것이 훨씬 깔끔합니다. 그러면 이런 오류가 당신에게 몰래 흘러가는 것을 막을 수 있습니다. –

+0

예. 알겠습니다. 일반적인 실수는 VB에서 C#으로 바뀌지 않고 메모가 전달되지 않는다는 것입니다. 다시 한 번 감사드립니다. – Zac

1

는 조건 경우 에 줄에 다음 더있다. 나는 그게 당신에게 문제가되는 것 같아요. 먼저 {} 사이에 코드를 포함하고이 코드는 인 경우 에 따라 달라집니다.

관련 문제