VB 2005 - Windows Vista
I have a form that seems to lock up when the number of rows exceed the
height of the datagridview. The following code executes when data is
received through the serial port (ie. barcode scanning). It seems that
everything works GREAT and processes as it was meant to be until the rows
exceed the display area. I have 7 columns. The Description column is the
only column with the AutoSizeMode set to Fill. The datagridview is docked
to the top. DataSource and DataMember for the DGV is not set to any
dataset.
I have the vertical scrollbar property set but it does not show up most of
the time. When/If it does, when I try and utilize the scrollbar, it locks
up the application immediately. I don't understand but I think it has to do
with the following method.
Sub ReceiveData(ByV al msg As String) 'Called after serial port has
received data and trimmed the value
CheckForIllegal CrossThreadCall s = False
description = Nothing 'form instance variable
loc = Nothing
Dim cmmInvMan As OleDbCommand
Dim strSQL As String
Dim drdTest As OleDbDataReader
Dim cnnInvMan As OleDbConnection = New
OleDbConnection (My.Settings.In ventory_managem ent_databaseCon nectionString)
cnnInvMan.Open( )
strSQL = "SELECT * FROM Products WHERE ProductIDNumber = '" & msg &
"'"
cmmInvMan = New OleDbCommand(st rSQL, cnnInvMan)
drdTest = cmmInvMan.Execu teReader
Do While drdTest.Read
prodIDNum = CInt(drdTest.It em("ProductID") )
description = drdTest.Item("P roductDescripti on").ToString
loc = drdTest.Item("P roductLocation" ).ToString
minimumOnHand = CInt(drdTest.It em("ReorderLeve l"))
maximumOnHand = CInt(drdTest.It em("MinimumRequ ired"))
Loop
drdTest.Close()
strSQL = "SELECT SUM(UnitsReceiv ed) - SUM(UnitsSold) -
SUM(UnitsShrink age) AS UnitsOnHand " & _
"FROM [" &
Me.Inventory_ma nagement_databa seDataSet.Inven tory_Transactio ns.TableName &
"] WHERE (ProductID = " & prodIDNum & ")"
cmmInvMan = New OleDbCommand(st rSQL, cnnInvMan)
drdTest = cmmInvMan.Execu teReader
Do While drdTest.Read
Try
units = CInt(drdTest.It em("UnitsOnHand "))
Catch ex As InvalidCastExce ption
units = 0
End Try
Loop
drdTest.Close()
cnnInvMan.Close ()
Dim value As Integer
Dim duplicateRow As DataGridViewRow
For Each duplicateRow In Me.DataGridView 1.Rows
If duplicateRow.Ce lls(0).Value Is Nothing Then Exit For
If duplicateRow.Ce lls(0).Value.To String = msg Then
'MessageBox.Sho w(duplicateRow. Cells(1).ToStri ng)
value = CInt(duplicateR ow.Cells(4).Val ue)
value += 1
duplicateRow.Ce lls(4).Value = value.ToString
'unitsScanned
If duplicateRow.Ce lls(1).Value Is Nothing Then 'description
column
duplicateRow.Ce lls(1).Value = description
End If
If duplicateRow.Ce lls(3).Value Is Nothing Then 'UnitsOnHand
duplicateRow.Ce lls(3).Value = units.ToString
End If
If duplicateRow.Ce lls(2).Value Is Nothing Then 'location
duplicateRow.Ce lls(2).Value = loc
End If
If duplicateRow.Ce lls(5).Value Is Nothing Then 'minOnHand
duplicateRow.Ce lls(5).Value = minimumOnHand.T oString
End If
If duplicateRow.Ce lls(6).Value Is Nothing Then 'maxOnHand
duplicateRow.Ce lls(6).Value = maximumOnHand.T oString
End If
Exit Sub
End If
Next
Dim row As String() = {msg, description, loc, units.ToString, "1",
minimumOnHand.T oString, maximumOnHand.T oString}
Me.DataGridView 1.Rows.Add(row)
End Sub
TIA,
Tony K.
I have a form that seems to lock up when the number of rows exceed the
height of the datagridview. The following code executes when data is
received through the serial port (ie. barcode scanning). It seems that
everything works GREAT and processes as it was meant to be until the rows
exceed the display area. I have 7 columns. The Description column is the
only column with the AutoSizeMode set to Fill. The datagridview is docked
to the top. DataSource and DataMember for the DGV is not set to any
dataset.
I have the vertical scrollbar property set but it does not show up most of
the time. When/If it does, when I try and utilize the scrollbar, it locks
up the application immediately. I don't understand but I think it has to do
with the following method.
Sub ReceiveData(ByV al msg As String) 'Called after serial port has
received data and trimmed the value
CheckForIllegal CrossThreadCall s = False
description = Nothing 'form instance variable
loc = Nothing
Dim cmmInvMan As OleDbCommand
Dim strSQL As String
Dim drdTest As OleDbDataReader
Dim cnnInvMan As OleDbConnection = New
OleDbConnection (My.Settings.In ventory_managem ent_databaseCon nectionString)
cnnInvMan.Open( )
strSQL = "SELECT * FROM Products WHERE ProductIDNumber = '" & msg &
"'"
cmmInvMan = New OleDbCommand(st rSQL, cnnInvMan)
drdTest = cmmInvMan.Execu teReader
Do While drdTest.Read
prodIDNum = CInt(drdTest.It em("ProductID") )
description = drdTest.Item("P roductDescripti on").ToString
loc = drdTest.Item("P roductLocation" ).ToString
minimumOnHand = CInt(drdTest.It em("ReorderLeve l"))
maximumOnHand = CInt(drdTest.It em("MinimumRequ ired"))
Loop
drdTest.Close()
strSQL = "SELECT SUM(UnitsReceiv ed) - SUM(UnitsSold) -
SUM(UnitsShrink age) AS UnitsOnHand " & _
"FROM [" &
Me.Inventory_ma nagement_databa seDataSet.Inven tory_Transactio ns.TableName &
"] WHERE (ProductID = " & prodIDNum & ")"
cmmInvMan = New OleDbCommand(st rSQL, cnnInvMan)
drdTest = cmmInvMan.Execu teReader
Do While drdTest.Read
Try
units = CInt(drdTest.It em("UnitsOnHand "))
Catch ex As InvalidCastExce ption
units = 0
End Try
Loop
drdTest.Close()
cnnInvMan.Close ()
Dim value As Integer
Dim duplicateRow As DataGridViewRow
For Each duplicateRow In Me.DataGridView 1.Rows
If duplicateRow.Ce lls(0).Value Is Nothing Then Exit For
If duplicateRow.Ce lls(0).Value.To String = msg Then
'MessageBox.Sho w(duplicateRow. Cells(1).ToStri ng)
value = CInt(duplicateR ow.Cells(4).Val ue)
value += 1
duplicateRow.Ce lls(4).Value = value.ToString
'unitsScanned
If duplicateRow.Ce lls(1).Value Is Nothing Then 'description
column
duplicateRow.Ce lls(1).Value = description
End If
If duplicateRow.Ce lls(3).Value Is Nothing Then 'UnitsOnHand
duplicateRow.Ce lls(3).Value = units.ToString
End If
If duplicateRow.Ce lls(2).Value Is Nothing Then 'location
duplicateRow.Ce lls(2).Value = loc
End If
If duplicateRow.Ce lls(5).Value Is Nothing Then 'minOnHand
duplicateRow.Ce lls(5).Value = minimumOnHand.T oString
End If
If duplicateRow.Ce lls(6).Value Is Nothing Then 'maxOnHand
duplicateRow.Ce lls(6).Value = maximumOnHand.T oString
End If
Exit Sub
End If
Next
Dim row As String() = {msg, description, loc, units.ToString, "1",
minimumOnHand.T oString, maximumOnHand.T oString}
Me.DataGridView 1.Rows.Add(row)
End Sub
TIA,
Tony K.
Comment