Share via

Facing Error While Passing Textbox to datagridview

Omer ahmed 1 Reputation point
2022-02-02T10:48:56.113+00:00

i am passing textboxext data to datagridview and getting error

System.InvalidOperationException: 'Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.'

my codes i am trying

     If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            Dim items As Boolean = False
            For Each row In DataGridView1.Rows
                If barcodetxt.Text = row.Cells("Barcode").Value Then
                    items = True
                    Exit For
                End If
            Next

            If items = False Then
                DataGridView1.Rows.Add(poidtxt.Text, reqbytxt.Text, suppidtxt.Text, suppnametxt.Text, quoidtxt.Text, itemnametxt.Text, barcodetxt.Text, itemnametxt.Text, descriptiontxt.Text, qtytxt.Text, colortxt.Text, sizetxt.Text, unittxt.Text, DateTimePicker2.Value, DateTimePicker3.Value, deliverytxt.Text, paymenttxt.Text, ratetxt.Text, totaltxt.Text, statustxt.Text)
                MessageBox.Show(Me, "Item Added to List", "System Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
                poidtxt.Clear()
                reqbytxt.Clear()
                suppidtxt.Clear()
                suppnametxt.Clear()
                quoidtxt.Clear()
                itemnametxt.Clear()
                barcodetxt.Clear()
                itemnametxt.Clear()
                descriptiontxt.Clear()
                qtytxt.Clear()
                colortxt.Clear()
                sizetxt.Clear()
                unittxt.Clear()
                ratetxt.Clear()
                totaltxt.Clear()
            Else
                MessageBox.Show(Me, "Item Already Added", "System Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        End If
        On Error Resume Next
        '   If CheckBox1.CheckState = CheckState.Checked Then
        Dim total1 As Integer
        For Each row As DataGridViewRow In DataGridView1.Rows
            total1 += row.Cells("Total").Value.ToString
        Next
        totaltxt.Text = total1

let me mention i am using below codes to create columns name.

  Private Sub BindGrid()
        Dim constring As String = appx.myconnection


        Using con As New MySqlConnection(constring)
            Using cmd As New MySqlCommand("SELECT * FROM purchaseorder", con)
                cmd.CommandType = CommandType.Text
                Using sda As New MySqlDataAdapter(cmd)
                    Using dt As New DataTable()
                        sda.Fill(dt)

                        'Set AutoGenerateColumns False
                        DataGridView1.AutoGenerateColumns = False

                        'Set Columns Count
                        DataGridView1.ColumnCount = 20
                        'Add Columns

                        DataGridView1.Columns(0).Name = "ponumbner"
                        DataGridView1.Columns(0).HeaderText = "PO Number"
                        DataGridView1.Columns(0).DataPropertyName = "ponumber"

                        DataGridView1.Columns(1).Name = "requestedby"
                        DataGridView1.Columns(1).HeaderText = "Requested By"
                        DataGridView1.Columns(1).DataPropertyName = "requestedby"

                        DataGridView1.Columns(13).Name = "orderdate"
                        DataGridView1.Columns(13).HeaderText = "Order Date"
                        DataGridView1.Columns(13).DataPropertyName = "orderdate"

                        DataGridView1.Columns(2).Name = "Supplierid"
                        DataGridView1.Columns(2).HeaderText = "Supplier ID"
                        DataGridView1.Columns(2).DataPropertyName = "supplierid"

                        DataGridView1.Columns(3).Name = "suppliername"
                        DataGridView1.Columns(3).HeaderText = "Supplier Name"
                        DataGridView1.Columns(3).DataPropertyName = "suppliername"
                        DataGridView1.Columns(3).Width = "200"

                        DataGridView1.Columns(14).Name = "expecteddelivery"
                        DataGridView1.Columns(14).HeaderText = "Exp-Delivery"
                        DataGridView1.Columns(14).DataPropertyName = "expecteddelivery"


                        DataGridView1.Columns(4).Name = "quotationid"
                        DataGridView1.Columns(4).HeaderText = "Quotation ID"
                        DataGridView1.Columns(4).DataPropertyName = "quotationid"

                        DataGridView1.Columns(15).Name = "deliveryterm"
                        DataGridView1.Columns(15).HeaderText = "Delivery Term"
                        DataGridView1.Columns(15).DataPropertyName = "deliveryterm"

                        DataGridView1.Columns(16).Name = "paymentterm"
                        DataGridView1.Columns(16).HeaderText = "Payment Term"
                        DataGridView1.Columns(16).DataPropertyName = "paymentterm"

                        DataGridView1.Columns(19).Name = "priority"
                        DataGridView1.Columns(19).HeaderText = "Status"
                        DataGridView1.Columns(19).DataPropertyName = "priority"


                        DataGridView1.Columns(5).Name = "itemnumber"
                        DataGridView1.Columns(5).HeaderText = "Item Number"
                        DataGridView1.Columns(5).DataPropertyName = "itemnumber"

                        DataGridView1.Columns(6).Name = "barcode"
                        DataGridView1.Columns(6).HeaderText = "Barcode"
                        DataGridView1.Columns(6).DataPropertyName = "barcode"



                        DataGridView1.Columns(7).Name = "itemname"
                        DataGridView1.Columns(7).HeaderText = "Item Name"
                        DataGridView1.Columns(7).DataPropertyName = "itemname"



                        DataGridView1.Columns(8).Name = "itemdescription"
                        DataGridView1.Columns(8).HeaderText = "Item Description"
                        DataGridView1.Columns(8).DataPropertyName = "itemdescription"
                        DataGridView1.Columns(8).Width = "200"


                        DataGridView1.Columns(9).Name = "itemsizee"
                        DataGridView1.Columns(9).HeaderText = "Size"
                        DataGridView1.Columns(9).DataPropertyName = "itemsize"

                        DataGridView1.Columns(10).Name = "itemcolor"
                        DataGridView1.Columns(10).HeaderText = "Color"
                        DataGridView1.Columns(10).DataPropertyName = "itemcolor"




                        DataGridView1.Columns(11).Name = "unit"
                        DataGridView1.Columns(11).HeaderText = "Unit"
                        DataGridView1.Columns(11).DataPropertyName = "unit"

                        DataGridView1.Columns(12).Name = "qtytoorder"
                        DataGridView1.Columns(12).HeaderText = "Qty To Order"
                        DataGridView1.Columns(12).DataPropertyName = "qtytoorder"

                        DataGridView1.Columns(17).Name = "rate"
                        DataGridView1.Columns(17).HeaderText = "Rate"
                        DataGridView1.Columns(17).DataPropertyName = "rate"

                        DataGridView1.Columns(18).Name = "total"
                        DataGridView1.Columns(18).HeaderText = "Total"
                        DataGridView1.Columns(18).DataPropertyName = "total"

                        DataGridView1.DataSource = dt
                    End Using
                End Using
            End Using
        End Using
    End Sub
Developer technologies | VB
0 comments No comments

2 answers

Sort by: Most helpful
  1. LesHay 7,146 Reputation points
    2022-02-03T05:27:28.277+00:00

    Hi

    You do have 'ponumbner', but no 'ponumber' in your code (line 19). One or the other needs to be changed.

    You have assigned the datatable 'dt' as the datasource for the datagridview (at line 111), which is the reason you are getting the exception as you can not add a row to a bound DataGridView. As Viorel is pointing out, you can add rows to the DataTable, and the new row will 'automatically' appear in the DataGridView (courtesy of the binding).

    A point to consider: if you check out the With xxxx End With structure, you would see that you could save yourself a LOT of typing (or copy/pasting). For example, With DataGridview1..... End With as below.

    (NOTE ALSO A COUPLE ERRORS USING A STRING AS AN INTEGER VALUE.)

    Option Strict On
    Option Explicit On
    Public Class Form1
      Dim dt As New DataTable("Freddy")
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With DataGridView1
          ' SEE SPELLING FOR COLUMN NAME
          .Columns(0).Name = "ponumbner"
          .Columns(0).HeaderText = "PO Number"
          .Columns(0).DataPropertyName = "ponumber"
    
          .Columns(1).Name = "requestedby"
          .Columns(1).HeaderText = "Requested By"
          .Columns(1).DataPropertyName = "requestedby"
    
          .Columns(13).Name = "orderdate"
          .Columns(13).HeaderText = "Order Date"
          .Columns(13).DataPropertyName = "orderdate"
    
          .Columns(2).Name = "Supplierid"
          .Columns(2).HeaderText = "Supplier ID"
          .Columns(2).DataPropertyName = "supplierid"
    
          .Columns(3).Name = "suppliername"
          .Columns(3).HeaderText = "Supplier Name"
          .Columns(3).DataPropertyName = "suppliername"
          .Columns(3).Width = "200"  ' *** WRONG ***
    
          .Columns(14).Name = "expecteddelivery"
          .Columns(14).HeaderText = "Exp-Delivery"
          .Columns(14).DataPropertyName = "expecteddelivery"
    
    
          .Columns(4).Name = "quotationid"
          .Columns(4).HeaderText = "Quotation ID"
          .Columns(4).DataPropertyName = "quotationid"
    
          .Columns(15).Name = "deliveryterm"
          .Columns(15).HeaderText = "Delivery Term"
          .Columns(15).DataPropertyName = "deliveryterm"
    
          .Columns(16).Name = "paymentterm"
          .Columns(16).HeaderText = "Payment Term"
          .Columns(16).DataPropertyName = "paymentterm"
    
          .Columns(19).Name = "priority"
          .Columns(19).HeaderText = "Status"
          .Columns(19).DataPropertyName = "priority"
    
    
          .Columns(5).Name = "itemnumber"
          .Columns(5).HeaderText = "Item Number"
          .Columns(5).DataPropertyName = "itemnumber"
    
          .Columns(6).Name = "barcode"
          .Columns(6).HeaderText = "Barcode"
          .Columns(6).DataPropertyName = "barcode"
    
    
    
          .Columns(7).Name = "itemname"
          .Columns(7).HeaderText = "Item Name"
          .Columns(7).DataPropertyName = "itemname"
    
    
    
          .Columns(8).Name = "itemdescription"
          .Columns(8).HeaderText = "Item Description"
          .Columns(8).DataPropertyName = "itemdescription"
          .Columns(8).Width = "200" ' *** WRONG ***
    
    
          .Columns(9).Name = "itemsizee"
          .Columns(9).HeaderText = "Size"
          .Columns(9).DataPropertyName = "itemsize"
    
          .Columns(10).Name = "itemcolor"
          .Columns(10).HeaderText = "Color"
          .Columns(10).DataPropertyName = "itemcolor"
    
    
    
    
          .Columns(11).Name = "unit"
          .Columns(11).HeaderText = "Unit"
          .Columns(11).DataPropertyName = "unit"
    
          .Columns(12).Name = "qtytoorder"
          .Columns(12).HeaderText = "Qty To Order"
          .Columns(12).DataPropertyName = "qtytoorder"
    
          .Columns(17).Name = "rate"
          .Columns(17).HeaderText = "Rate"
          .Columns(17).DataPropertyName = "rate"
    
          .Columns(18).Name = "total"
          .Columns(18).HeaderText = "Total"
          .Columns(18).DataPropertyName = "total"
    
          .DataSource = dt
        End With
      End Sub
    End Class
    

    Was this answer helpful?

    0 comments No comments

  2. Viorel 127K Reputation points
    2022-02-02T11:16:23.74+00:00

    Check this concept:

    Private dt As DataTable ' member of the class (form)      '
    
    Private Sub BindGrid( )
       . . .
       dt = New DataTable( )
       sda.Fill( dt )
       . . .
       DataGridView1.DataSource = dt
    End Sub
    

    Adding new row:

    Dim r = dt.NewRow( )
    r("ponumbner") = poidtxt.Text
    r("requestedby") = reqbytxt.Text
    . . .
    dt.Rows.Add( r )
    

    The new row should appear automatically in the grid.

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.