I'm trying to fill data from another datagridview to main datagridview in vb.net
But result in frmMaindt
nothing appears or the problem of data not transferring when I clicked button event ("btnOK") in frmSearchdt
Is there something wrong with the code?
addition, is it possible to implement if I use a keyboard shortcut to call a form instead of using DataGridViewButtonColumn?
Please guide me
Thanks
Code in frmMaindt
Public Class frmMaindt
Public dtMainGrid As DataTable = New DataTable
Public flag As Boolean = False
Sub Header()
dtMainGrid.Columns.Add("Item")
dtMainGrid.Columns.Add("Item Description")
dtMainGrid.Columns.Add("Qty")
dtMainGrid.Columns.Add("Item Unit")
dtMainGrid.Columns.Add("Unit Price")
End Sub
Sub BindGrid()
Header()
Dim row As DataRow = dtMainGrid.NewRow
row("Item") = ""
row("Item Description") = ""
row("Qty") = ""
row("Item Unit") = ""
row("Unit Price") = ""
dtMainGrid.Rows.Add(row)
DataGridView1.DataSource = dtMainGrid
DataGridView1.Refresh()
DataGridView1.ColumnHeadersVisible = True
Dim x As Integer = 0
For Each item In dtMainGrid.Columns
DataGridView1.Columns(x).HeaderText = item.ToString
DataGridView1.Columns.Item(x).SortMode = DataGridViewColumnSortMode.NotSortable
x = x + 1
Next
Dim btn As New DataGridViewButtonColumn
btn.HeaderText = ""
btn.Text = "SEARCH"
btn.Name = "btn"
btn.DefaultCellStyle.BackColor = Color.Black
btn.DefaultCellStyle.ForeColor = Color.White
btn.UseColumnTextForButtonValue = True
DataGridView1.Columns.Insert(0, btn)
DataGridView1.Columns(0).Width = 50
DataGridView1.Columns(1).Width = 100
DataGridView1.Columns(2).Width = 100
DataGridView1.Columns(3).Width = 100
DataGridView1.Columns(4).Width = 100
DataGridView1.Columns(5).Width = 100
DataGridView1.Columns(0).ReadOnly = True
DataGridView1.Columns(1).ReadOnly = False
DataGridView1.Columns(2).ReadOnly = True
DataGridView1.Columns(3).ReadOnly = False
DataGridView1.Columns(4).ReadOnly = True
DataGridView1.Columns(5).ReadOnly = True
DataGridView1.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
DataGridView1.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(3).DefaultCellStyle.Format = "#,###,###,##0"
DataGridView1.Columns(5).DefaultCellStyle.Format = "#,###,###,##0.#0"
DataGridView1.AllowUserToAddRows = False
DataGridView1.ScrollBars = ScrollBars.Both
DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtRowIdx.Text = "0"
'DataGridView1.Rows(txtRowIdx.Text).Cells(1).Value = ""
BindGrid()
End Sub
Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
txtRowIdx.Text = e.RowIndex
If e.Button = MouseButtons.Left AndAlso e.ColumnIndex = 0 Then
Dim frmSearchdt As frmSearchdt = New frmSearchdt()
frmSearchdt.txtRowIndex.Text = e.RowIndex
frmSearchdt.txtRowIndexSearch.Text = "0"
Dim result As DialogResult = frmSearchdt.ShowDialog()
If result = DialogResult.OK Then
DataGridView1.Rows(frmSearchdt.RowIndexMainGrid).Cells(1).Value = frmSearchdt.ItemCode
DataGridView1.Rows(frmSearchdt.RowIndexMainGrid).Cells(2).Value = frmSearchdt.ItemDesc
DataGridView1.Rows(frmSearchdt.RowIndexMainGrid).Cells(3).Value = frmSearchdt.Qty
DataGridView1.Rows(frmSearchdt.RowIndexMainGrid).Cells(4).Value = frmSearchdt.ItemUnit
DataGridView1.Rows(frmSearchdt.RowIndexMainGrid).Cells(5).Value = frmSearchdt.UnitPrice
End If
End If
If e.ColumnIndex = 1 Then
Try
If flag = True Then
If Not IsDBNull(DataGridView1.Rows(txtRowIdx.Text).Cells(1).Value) Then
DataGridView1.CurrentCell = DataGridView1.Rows(txtRowIdx.Text).Cells(1)
End If
End If
Catch ex As Exception
Return
End Try
End If
End Sub
End Class
Code in frmSearchdt
Public Class frmSearchdt
Public _rowIndexMainGrid As String = ""
Public _item As String = ""
Public _itemDesc As String = ""
Public _qty As String = ""
Public _itemUnit As String = ""
Public _unitPrice As String = ""
Public Property RowIndexMainGrid As String
Get
Return _rowIndexMainGrid
End Get
Set(ByVal value As String)
_rowIndexMainGrid = value
End Set
End Property
Public Property ItemCode As String
Get
Return _item
End Get
Set(ByVal value As String)
_item = value
End Set
End Property
Public Property ItemDesc As String
Get
Return _itemDesc
End Get
Set(ByVal value As String)
_itemDesc = value
End Set
End Property
Public Property Qty As String
Get
Return _qty
End Get
Set(ByVal value As String)
_qty = value
End Set
End Property
Public Property ItemUnit As String
Get
Return _itemUnit
End Get
Set(ByVal value As String)
_itemUnit = value
End Set
End Property
Public Property UnitPrice As String
Get
Return _unitPrice
End Get
Set(ByVal value As String)
_item = value
End Set
End Property
Sub BindGrid(ByVal isSearch As Boolean, ByVal searchBy As String)
Dim dt As DataTable = New DataTable
Dim data As Datadt = New Datadt()
dt = Data.GetData()
If (isSearch) Then
Dim dv As New DataView(dt)
dv.RowFilter = searchBy
DataGridView1.DataSource = dv
Else
dt.Select()
DataGridView1.DataSource = dt
End If
DataGridView1.Refresh()
DataGridView1.ColumnHeadersVisible = True
'Dim x As Integer = 0
'For Each item In dt.Columns
' DataGridView1.Columns(x).HeaderText = item.ToString
' x = x + 1
'Next
DataGridView1.Columns(2).Visible = False
DataGridView1.Columns(3).Visible = False
DataGridView1.Columns(0).Width = 100
DataGridView1.Columns(1).Width = 350
DataGridView1.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.ScrollBars = ScrollBars.Both
DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing
DataGridView1.ReadOnly = True
End Sub
Private Sub frmSearchdt_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BindGrid(False, "")
End Sub
Sub SelectedRow(ByVal index As Integer)
Me.Hide()
Dim rowIndexMainGrid = CInt(txtRowIndex.Text)
_rowIndexMainGrid = rowIndexMainGrid
_item = DataGridView1.Rows(index).Cells(0).Value
_itemDesc = DataGridView1.Rows(index).Cells(1).Value
_qty = "0"
_itemUnit = DataGridView1.Rows(index).Cells(2).Value
_unitPrice = DataGridView1.Rows(index).Cells(3).Value
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
SelectedRow(CInt(txtRowIndexSearch.Text))
End Sub
Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
txtRowIndexSearch.Text = e.RowIndex
End Sub
Private Sub DataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
SelectedRow(e.RowIndex)
End Sub
End Class
code in Datadt
Public Class Datadt
Public Function GetData() As DataTable
Dim dt As DataTable = New DataTable
Try
dt.Columns.Add("Item")
dt.Columns.Add("Item Description")
dt.Columns.Add("Item Unit")
dt.Columns.Add("Unit Price")
Dim row As DataRow = dt.NewRow
row("Item") = "B-0001"
row("Item Description") = "Laptop ASUS E4567 RAM 8 GB"
row("Item Unit") = "PCS"
row("Unit Price") = "9000000"
dt.Rows.Add(row)
row = dt.NewRow
row("Item") = "B-0002"
row("Item Description") = "Keyboard Logitech E84"
row("Item Unit") = "PCS"
row("Unit Price") = "70000"
dt.Rows.Add(row)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Return dt
End Function
End Class
Please learn to use the debugger. It will help you enormously. In your case, if you had set a breakpoint within CellMouseClick in frmMaindt DataGridView1 when you call the frmSearchdt, you would have seen that on returning from the ShowDialog() the following if statement fails (If result = DialogResult.OK Then). This should have been sufficient to point you in the right direction. In the SelectedRow function you are hiding frmSearchdt, which has been instantiated as a Dialog, but you are nowhere setting its DialogResult property.
All you need to do, is to add the following line at the end of SelectedRow:
DialogResult = DialogResult.OK