DataGridView ScrollBar错误

时间:2014-02-22 01:11:40

标签: vb.net datagridview

当我获取DataGridView的数据时,我的表单会冻结,直到While循环完成,但我的滚动条工作正常。我试着打电话给Application.DoEvents();,但这也不起作用。

如果我在线程中获取数据,那么我的表单不会冻结,但滚动条会在While完成后禁用并且不起作用。我尝试了BackgroundWorker,但滚动条在使用时也有问题。

Private Sub dg()
    myth = New Threading.Thread(AddressOf dgd)
    myth.IsBackground = True
    myth.Start()
End Sub

Private Sub dgd()
    Dim x As Integer
    If DataGridView1.Rows.Count = 0 Then x = 0 Else x = DataGridView1.Rows.Count
    Try
        Dim conn35a As New OleDbConnection("connstring")
        Dim cmd35a As New OleDbCommand
        cmd35a.CommandText = "Select count(*) from asd where downur Is Null"
        cmd35a.CommandType = CommandType.Text
        cmd35a.Connection = conn35a
        conn35a.Open()
        Dim returnValueaa As Integer = cmd35a.ExecuteScalar()
        conn35a.Close()
        Dim komut As String = "Select * from asd where downur Is Null"
        Dim conn2 As New OleDbConnection("connstring")
        conn2.Open()
        Dim cmd2 As New OleDbCommand(komut, conn2)
        Dim dr2 As OleDbDataReader = cmd2.ExecuteReader
        If dr2.HasRows Then
            While dr2.Read
                Dim conn35 As New OleDbConnection("connstring")
                Dim cmd35 As New OleDbCommand
                cmd35.CommandText = "select count(*) from grid where ur = '" + dr2.Item("ur").ToString + "'"
                cmd35.CommandType = CommandType.Text
                cmd35.Connection = conn35
                conn35.Open()
                Dim returnValuea = cmd35.ExecuteScalar()
                conn35.Close()
                If returnValuea = 0 Then
                    DataGridView1.Rows.Add()
                    DataGridView1.Rows.Item(x).Cells(0).Value = x + 1
                    DataGridView1.Rows.Item(x).Cells(4).Value = "ID"
                    DataGridView1.Rows.Item(x).Cells(5).Value = dr2.Item("ur").ToString
                    DataGridView1.Rows.Item(x).Cells(6).Value = dr2.Item("ch").ToString
                    DataGridView1.Rows.Item(x).Cells(7).Value = dr2.Item("ti").ToString
                    DataGridView1.Rows.Item(x).Cells(8).Value = ".."
                    Dim client2 As New WebClient
                    Dim url As String = dr2.Item("pic").ToString
                    DataGridView1.Rows.Item(x).Cells(12).Value = New Bitmap(New MemoryStream(client2.DownloadData(url)))
                    DataGridView1.Rows.Item(x).Cells(13).Value = dr2.Item("vi")
                    DataGridView1.Rows.Item(x).Cells(14).Value = dr2.Item("su").ToString()
                    Dim con4 As New OleDbConnection("connstring") 
                    con4.Open()
                    Dim cmd5 = New OleDbCommand("INSERT INTO grid (ur) VALUES (@ur)", con4)
                    cmd5.CommandType = CommandType.Text
                    cmd5.Parameters.Add("@ur", OleDbType.VarChar, 500).Value = dr2.Item("ur").ToString
                    cmd5.ExecuteNonQuery()
                    con4.Close()
                    x += 1
                End If
            End While
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

我通过删除Thread并直接调用方法来解决这个问题