2016-02-09 55 views
1

我正在更新大型数据库中的1个字段。 因为我想看看进度有多远,所以我想在更新记录时更新我的​​标签。但是,这不起作用:他只在最后完成时更新它。文本(标签)未更新(vb.net)

请注意,进度栏和更新工作正常,而且我没有任何错误消息。任何想法?

Private Sub btnUpdateHeight_Click(sender As System.Object, e As System.EventArgs) Handles btnUpdateHeight.Click 
    dt = loadform() 
    ProgressBarTSLabels.Minimum = 0 
    Dim qty As Integer = 0 
    ProgressBarTSLabels.Value = 0 
    ProgressBarTSLabels.Maximum = dt.Rows.Count 
    Dim db As New DataClasses1DataContext 
    For Each Me.dr In dt.Rows 
     If dr.Item(5).ToString.Trim <> "" Then 
      Dim sqlupdate As tblLabel = (From expr In db.tblLabels Where expr.LabelID = dr.Item(0).ToString).First 
      With sqlupdate 
       .Height = If(dr.Item(5).ToString = "max", "999", dr.Item(5).ToString) 
       db.SubmitChanges() 
      End With 
     End If 
     ProgressBarTSLabels.Value += 1 
     qty += 1 
     lblQty.Text = qty & "/" & dt.Rows.Count 
    Next 
End Sub 

回答

2

只要在设置文本后调用Label.Refresh方法,这会强制标签重绘。您也可以在进度条上调用Refresh方法,以使其工作顺利。

... 
    ProgressBarTSLabels.Value += 1 
    qty += 1 
    lblQty.Text = qty & "/" & dt.Rows.Count 
    lblQty.Refresh      '<-- here 
    ProgressBarTSLabels.Refresh  '<-- and here 
Next 
+1

该死的,我不知道那个选项。 感谢您的快速响应! – GertDeWilde

+0

这是我见过的任何语言中最奇怪的事情之一......在标签上调用Refresh()?哈哈..也非常需要..除非你在方法中的代码运行后设置文本? (这与For循环无关btw)所以“设置info text>运行代码更新数据网格视图”所有在同一个方法中不会更新标签,而是“运行代码来更新数据网格视图”集信息文本“不需要刷新()工作?这就是我的情况。在设置文本后调用Refresh()会在执行时起作用,这似乎并不必要,但显然它在VB.NET中。 – whyoz