2016-01-07 4 views
0

У меня есть два DataGridView в моей форме. Один из них называется grd_product, а другой - grd_order. Когда я нажимаю ячейку в файле grd_product, она отображает детали продукта в TextBox. Поэтому, после того как пользователь введет количество, предположительно, новая строка будет добавлена ​​в grd_order, когда пользователь нажмет btn_add. Но вместо этого я получаю сообщение об ошибке.Передача данных из TextBox в DataGridView в VB.NET

Public Class frm_customer_orderproduct 
    Dim current_id As String 
    Private Sub frm_customer_orderproduct_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     'Dim regDate As Date = Date.Today() 

     lbl_user.Text = "Hi, " & custName & "!" 

     refresh_grid() 
     get_current_id() 
    End Sub 
    Private Sub refresh_grid() 
     Dim mysql As String = "SELECT FLD_PRODUCT_ID, FLD_PRODUCT_NAME, FLD_PRODUCT_PRICE FROM TBL_PRODUCTS" 
     Dim mydatatable As New DataTable 
     Dim myreader As New OleDb.OleDbDataAdapter(mysql, myconnection) 
     myreader.Fill(mydatatable) 
     grd_product.DataSource = mydatatable 
    End Sub 
    Private Sub clear_fields() 
     txt_id.Text = "" 
     txt_name.Text = "" 
     txt_price.Text = "" 
     txt_qty.Text = "" 
    End Sub 
    Private Sub get_current_id() 
     Dim current_row As Integer = grd_product.CurrentRow.Index 
     current_id = grd_product(0, current_row).Value 

     txt_id.Text = current_id 
     txt_name.Text = grd_product(1, current_row).Value 
     txt_price.Text = grd_product(2, current_row).Value 
    End Sub 

    Private Sub grd_product_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grd_product.CellClick 
     get_current_id() 
    End Sub 

    Private Sub btn_add_Click(sender As System.Object, e As System.EventArgs) Handles btn_add.Click 
     If txt_qty.Text = "" Then 
      MsgBox("Please insert quantity") 
     Else 
      Dim dt As New DataTable 
      Dim dr As DataRow 

      dt.Columns.Add("Product ID") 
      dt.Columns.Add("Product Name") 
      dt.Columns.Add("Price") 
      dt.Columns.Add("Quantity") 
      dr = dt.NewRow 
      dr("id") = txt_id.Text 
      dr("name") = txt_name.Text 
      dr("price") = txt_price.Text 
      dr("qty") = txt_qty.Text 
      dt.Rows.Add(dr) 
      grd_order.DataSource = dt 

     End If 

    End Sub 
End Class 

enter image description here enter image description here

Возможно, после того, как пользователь нажмите кнопку Добавить для неограниченных продуктов, он будет добавлен в grd_order

ответ

0

Это довольно очевидно, что столбцы имя DataTable dt не такой же, как DataRows

вы должны использовать

dr("Product ID")= 
dr("Product Name")= 
dr("Price")= 
dr("Quantity")= 

или

dr(0)= 
    dr(1)= 
    dr(2)= 
    dr(3)= 

На мой взгляд, вы можете попробовать следующий способ добавления значения в текстовом поле datagirdview вместо DataTable

If Trim(txt_qty.Text) = "" Then 
      MsgBox("Please insert quantity") 
     Else 
      Dim rnum As Integer = datagridviewname.Rows.Add() 
      datagridviewname.Rows.Item(rnum).Cells("name_of_productid_column").Value = txt_id.Text 
      datagridviewname.Rows.Item(rnum).Cells("name_of_productname_column").Value = txt_name.Text 
      datagridviewname.Rows.Item(rnum).Cells("name_of_price_column").Value = txt_price.Text 
      datagridviewname.Rows.Item(rnum).Cells("name_of_qty_column").Value = txt_price.Text 
End If 
+0

Ой хорошо. Понял! Кроме того, когда пользователь пытается добавить вторую строку, он заменяет первую. Как подсчитать и добавить новую строку? –

+0

Существует исключение, в котором говорится: «Никакая строка не может быть добавлена ​​в элемент управления DataGridView, который не имеет столбцов. Столбцы должны быть добавлены первыми. ' –

+0

Плюс я получаю данные от grd_product, который находится из datatable и отображает его внутри TextBoxes. –

Смежные вопросы