我将这个简单的程序从vb转换为c#,它从一个小的访问数据库中更新,显示,创建和删除项目。 Bellow是VB中的PopulateListBox()函数,它遍历数据集中的每一行,并查看它是否被删除,未删除或有错误。这两行都有2个错误 lstAlbums.Items.Add(项目); 和 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 :(得分:1)
在您的代码中, if条件会有更多内容。我认为这会给你带来麻烦。首先要在 {} 之间加入代码,这取决于 if condition 然后检查它。
答案 1 :(得分:0)
您错过了{
语句中的开括号}
和if
,因此如果条件匹配,紧跟if
语句后面的语句会执行,之后的陈述总是执行。
在VB.NET中,您的if
语句类似于:
If condition Then
' do something
' do something else
End If
要将其转换为C#并正确执行2行代码,您应该使用大括号:
if (condition)
{
// do something
// do something else
}
您当前的翻译实际上是这样的:
if (condition)
// do something (if condition is true)
// do something else (not dependent on the condition)
换句话说,第二个语句总是执行。最好在括号内包含多个语句,以避免出现这种意外情况。
将您的代码更改为:
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);
}