Как отобразить определенную строку в datagridview из базы данных ms access в VB

введите здесь описание изображения

Привет, я разрабатываю проект vb. У меня есть база данных MS-access с 3 столбцами (Имя, Имя, Цена). В форму я добавил два текстовых поля и кнопку добавления (TextBox2 = Itno, Textbox = количество). если пользователь указывает Itno и количество и нажимает кнопку «Добавить», тогда имя и цена Itno должны отображаться в datagridview вместе с количеством, введенным в Textbox3.

Я пробовал, насколько мне известно. Но я не могу отображать данные в Datagridview. Кто-нибудь может мне помочь, пожалуйста...

Импортирует System.Data.OleDb Импортирует System.Data.DataTable

Public Class Form1
    Dim ad As System.Data.OleDb.OleDbDataAdapter
    Dim cm As System.Data.OleDb.OleDbCommand
    Dim co As System.Data.OleDb.OleDbConnection
    Dim dr As System.Data.OleDb.OleDbDataReader
    Dim tb As New DataTable("Table")

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        tb.Columns.Add("Iteam", Type.GetType("System.Int32"))
        tb.Columns.Add("Quantity", Type.GetType("System.String"))
        tb.Columns.Add("Price", Type.GetType("System.String"))
        DataGridView1.DataSource = tb
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        co = New System.Data.OleDb.OleDbConnection
        co.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" &
                "Data Source=C:\Users\Vicky\Desktop\db\bill\bill.mdb;"
        Try
            co.Open()
            Dim cd As String
            cd = "SELECT * FROM item WHERE Itno='" & TextBox2.Text & "'"
            cm = New OleDb.OleDbCommand(cd, co)
            dr = cm.ExecuteReader()
            While dr.Read()
                Dim n As String
                Dim p As String
                p = dr("Price").ToString
                n = dr("Name").ToString
                tb.Rows.Add(p.ToString, TextBox3.Text, n.ToString)
                DataGridView1.DataSource = tb

            End While
            co.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub
End Class

person Community    schedule 19.10.2016    source источник
comment
Вы предоставили соответствующий код, что хорошо, но не предоставили никаких объяснений, что не менее важно. Предоставьте ПОЛНОЕ и ЧЕТКОЕ объяснение того, чего именно вы пытаетесь достичь, и как фактическое поведение кода отличается от ваших ожиданий. Те, кто думает, что название говорит само за себя, редко бывают правы.   -  person jmcilhinney    schedule 19.10.2016
comment
Если вы хотите заполнить DataTable из считывателя данных, то это однострочный: myDataTable.Load(myDataReader).   -  person jmcilhinney    schedule 19.10.2016
comment
Если DataTable уже привязан к DataGrdiView, то нет причин связывать его снова. Если вы хотите изменить данные, просто Clear Rows коллекцию, а затем повторно заполните. Существующая привязка приведет к появлению новых данных в сетке.   -  person jmcilhinney    schedule 19.10.2016
comment
спасибо, ребята, вы можете дать правильный фрагмент кода в моем проекте   -  person    schedule 19.10.2016
comment
я очень не понимаю эту проблему   -  person    schedule 19.10.2016
comment
Итак, вы говорите, что на самом деле хотите иметь возможность добавлять новые строки в сетку из TextBoxes? Код, который у вас есть, выглядит так, будто вы хотите использовать TextBoxes, чтобы указать, какие существующие строки нужно получить из базы данных. Если вы на самом деле не можете четко сказать нам, чего вы хотите, то мы волшебным образом не сможем сказать вам, как это сделать. Я могу понять, что вам может быть неясно, как добиться того, чего вы хотите, но как вы можете не понимать, как вы хотите, чтобы приложение вело себя?   -  person jmcilhinney    schedule 19.10.2016
comment
да, я хочу, чтобы существующая строка отображалась в представлении сетки с помощью текстового поля, чтобы указать строку, которая мне нужна   -  person    schedule 19.10.2016
comment
Итак, почему вы добавляете TextBox3.Text к DataTable вручную? Эвар, ты действительно собираешься дать правильное объяснение, или мне просто надоест тратить свое время на то, чтобы спрашивать тебя о вещах, которые ты должен был уже объяснить и сдаться. Остановись, подумай, объясни.   -  person jmcilhinney    schedule 19.10.2016
comment
Учитывая ваше исключение, я думаю, что первая проблема заключается в вашем запросе, вы сравниваете число со строкой: WHERE Itno='" & TextBox2.Text & "' (обратите внимание на '). Еще одно замечание: с вашим запросом вы подвергаетесь внедрению SQL и неправильно размещаете свои объекты. (как связь)   -  person Matteo Umili    schedule 19.10.2016
comment
Вау... ты молодец, это сработало!!! Спасибо, jmcilhinney и Маттео Умили.   -  person    schedule 19.10.2016
comment
Вы, ребята, лучшие   -  person    schedule 19.10.2016


Ответы (1)


        Dim cd As String
        cd = "SELECT * FROM item WHERE Itno=" & TextBox2.Text & ""
        cm = New OleDb.OleDbCommand(cd, co)
        dr = cm.ExecuteReader
        While dr.Read()
            Dim n As String
            Dim p As String
            p = dr("Price").ToString
            n = dr("Name").ToString
            Dim R As DataRow = tb.NewRow
            R("Name") = n.ToString
            R("Quantity") = TextBox3.Text
            R("Price") = p.ToString
            tb.Rows.Add(R)
            DataGridView1.DataSource = tb

я исправил код

person Community    schedule 20.10.2016