在 VB.NET 中将数据从 TextBox 传递到 DataGridView
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34648049/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Pass data from TextBox to DataGridView in VB.NET
提问by Athirah Hazira
I have two DataGridView in my form. One named grd_product and another is grd_order. When i click a cell in grd_product, it will display the detail of the product in the TextBox. So after the user insert the quantity, supposedly a new row will be added in grd_order when the user click btn_add. But i get an error instead.
我的表单中有两个 DataGridView。一个名为 grd_product,另一个名为 grd_order。当我单击 grd_product 中的单元格时,它将在 TextBox 中显示产品的详细信息。所以在用户插入数量后,当用户点击btn_add时,应该会在grd_order中添加一个新行。但我得到了一个错误。
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
Supposedly, after the user click add for unlimited products, it will be added into grd_order
据说,在用户点击添加无限产品后,它将被添加到 grd_order
采纳答案by Vivek S.
It's pretty clear that columns name of datatable dtis not same as datarows
很明显,数据表的列名dt与数据行不同
you should use
你应该使用
dr("Product ID")=
dr("Product Name")=
dr("Price")=
dr("Quantity")=
or
或者
dr(0)=
dr(1)=
dr(2)=
dr(3)=
In my opinion you can try following way to add textbox values to datagirdview instead of using datatable
在我看来,您可以尝试以下方式将文本框值添加到 datagirdview 而不是使用数据表
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


