T
Tony K
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(ByVal msg As String) 'Called after serial port has
received data and trimmed the value
CheckForIllegalCrossThreadCalls = 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.Inventory_management_databaseConnectionString)
cnnInvMan.Open()
strSQL = "SELECT * FROM Products WHERE ProductIDNumber = '" & msg &
"'"
cmmInvMan = New OleDbCommand(strSQL, cnnInvMan)
drdTest = cmmInvMan.ExecuteReader
Do While drdTest.Read
prodIDNum = CInt(drdTest.Item("ProductID"))
description = drdTest.Item("ProductDescription").ToString
loc = drdTest.Item("ProductLocation").ToString
minimumOnHand = CInt(drdTest.Item("ReorderLevel"))
maximumOnHand = CInt(drdTest.Item("MinimumRequired"))
Loop
drdTest.Close()
strSQL = "SELECT SUM(UnitsReceived) - SUM(UnitsSold) -
SUM(UnitsShrinkage) AS UnitsOnHand " & _
"FROM [" &
Me.Inventory_management_databaseDataSet.Inventory_Transactions.TableName &
"] WHERE (ProductID = " & prodIDNum & ")"
cmmInvMan = New OleDbCommand(strSQL, cnnInvMan)
drdTest = cmmInvMan.ExecuteReader
Do While drdTest.Read
Try
units = CInt(drdTest.Item("UnitsOnHand"))
Catch ex As InvalidCastException
units = 0
End Try
Loop
drdTest.Close()
cnnInvMan.Close()
Dim value As Integer
Dim duplicateRow As DataGridViewRow
For Each duplicateRow In Me.DataGridView1.Rows
If duplicateRow.Cells(0).Value Is Nothing Then Exit For
If duplicateRow.Cells(0).Value.ToString = msg Then
'MessageBox.Show(duplicateRow.Cells(1).ToString)
value = CInt(duplicateRow.Cells(4).Value)
value += 1
duplicateRow.Cells(4).Value = value.ToString
'unitsScanned
If duplicateRow.Cells(1).Value Is Nothing Then 'description
column
duplicateRow.Cells(1).Value = description
End If
If duplicateRow.Cells(3).Value Is Nothing Then 'UnitsOnHand
duplicateRow.Cells(3).Value = units.ToString
End If
If duplicateRow.Cells(2).Value Is Nothing Then 'location
duplicateRow.Cells(2).Value = loc
End If
If duplicateRow.Cells(5).Value Is Nothing Then 'minOnHand
duplicateRow.Cells(5).Value = minimumOnHand.ToString
End If
If duplicateRow.Cells(6).Value Is Nothing Then 'maxOnHand
duplicateRow.Cells(6).Value = maximumOnHand.ToString
End If
Exit Sub
End If
Next
Dim row As String() = {msg, description, loc, units.ToString, "1",
minimumOnHand.ToString, maximumOnHand.ToString}
Me.DataGridView1.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(ByVal msg As String) 'Called after serial port has
received data and trimmed the value
CheckForIllegalCrossThreadCalls = 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.Inventory_management_databaseConnectionString)
cnnInvMan.Open()
strSQL = "SELECT * FROM Products WHERE ProductIDNumber = '" & msg &
"'"
cmmInvMan = New OleDbCommand(strSQL, cnnInvMan)
drdTest = cmmInvMan.ExecuteReader
Do While drdTest.Read
prodIDNum = CInt(drdTest.Item("ProductID"))
description = drdTest.Item("ProductDescription").ToString
loc = drdTest.Item("ProductLocation").ToString
minimumOnHand = CInt(drdTest.Item("ReorderLevel"))
maximumOnHand = CInt(drdTest.Item("MinimumRequired"))
Loop
drdTest.Close()
strSQL = "SELECT SUM(UnitsReceived) - SUM(UnitsSold) -
SUM(UnitsShrinkage) AS UnitsOnHand " & _
"FROM [" &
Me.Inventory_management_databaseDataSet.Inventory_Transactions.TableName &
"] WHERE (ProductID = " & prodIDNum & ")"
cmmInvMan = New OleDbCommand(strSQL, cnnInvMan)
drdTest = cmmInvMan.ExecuteReader
Do While drdTest.Read
Try
units = CInt(drdTest.Item("UnitsOnHand"))
Catch ex As InvalidCastException
units = 0
End Try
Loop
drdTest.Close()
cnnInvMan.Close()
Dim value As Integer
Dim duplicateRow As DataGridViewRow
For Each duplicateRow In Me.DataGridView1.Rows
If duplicateRow.Cells(0).Value Is Nothing Then Exit For
If duplicateRow.Cells(0).Value.ToString = msg Then
'MessageBox.Show(duplicateRow.Cells(1).ToString)
value = CInt(duplicateRow.Cells(4).Value)
value += 1
duplicateRow.Cells(4).Value = value.ToString
'unitsScanned
If duplicateRow.Cells(1).Value Is Nothing Then 'description
column
duplicateRow.Cells(1).Value = description
End If
If duplicateRow.Cells(3).Value Is Nothing Then 'UnitsOnHand
duplicateRow.Cells(3).Value = units.ToString
End If
If duplicateRow.Cells(2).Value Is Nothing Then 'location
duplicateRow.Cells(2).Value = loc
End If
If duplicateRow.Cells(5).Value Is Nothing Then 'minOnHand
duplicateRow.Cells(5).Value = minimumOnHand.ToString
End If
If duplicateRow.Cells(6).Value Is Nothing Then 'maxOnHand
duplicateRow.Cells(6).Value = maximumOnHand.ToString
End If
Exit Sub
End If
Next
Dim row As String() = {msg, description, loc, units.ToString, "1",
minimumOnHand.ToString, maximumOnHand.ToString}
Me.DataGridView1.Rows.Add(row)
End Sub
TIA,
Tony K.