об обновлении данных в datagridview и фильтре - PullRequest
0 голосов
/ 30 января 2012

Я запутался в наборе данных и просмотре данных, которые я либо использую набор данных для обновления данных, либо просмотр данных, чтобы отфильтровать данные, но не могу иметь оба вместе в одно и то же время.

Private Sub searchStaff_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ds = New DataSet

        dv = New DataView

        Dim ad As New SqlDataAdapter("SELECT * FROM staff", connection)

        ad.Fill(ds, "staff")

        dv.Table = ds.Tables("staff")

        Me.DataGridView1.DataSource = dv
End Sub

Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged

         Try
                dv.RowFilter = "StaffName like '" & txtSearch.Text & "*'"

          Catch ex As Exception
        End Try
      End Sub

это код фильтрации данных на dataview, который отлично работает для меня. но позже я должен реализовать другую функцию обновления данных в datagridview, что, как я обнаружил в Интернете, требует, чтобы я использовал набор данных в качестве источника данных, а не davaview.

Private Sub searchStaff_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        connection = New SqlConnection(connectionString)
        ds = New DataSet
        cmd = New SqlCommand("SELECT * FROM staff", connection)
        adp=New SqlDataAdapter(cmd)
        adp.Fill(ds, "staff")
        Me.DataGridView1.DataSource = ds
        Me.DataGridView1.DataMember = "staff"

    End Sub
Private Sub btnUpdate_ClickEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.ClickEvent
    Dim cmdbuilder As New SqlCommandBuilder(adp)
    Dim i As Integer

    Try
        i = adp.Update(ds, "staff")
        MsgBox("Record updated= " & i)

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

так что я надеюсь, что кто-то из 1 может показать мне, как мне использовать обе функции «обновлять, фильтровать» одновременно, используя какой источник данных?

1 Ответ

0 голосов
/ 31 января 2012

Вы должны использовать DataSet (или DataTable) с SqlDataAdapter для выполнения операции обновления; DataView используется для фильтрации данных, но не для фиксации изменений в базе данных. Вот пример для вашего метода searchStaff_Load:

Private Sub searchStaff_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         

    connection = New SqlConnection(connectionString)    
    ds = New DataSet         
    cmd = New SqlCommand("SELECT * FROM staff", connection)    
    adp=New SqlDataAdapter(cmd)        
    adp.Fill(ds, "staff")
    Me.DataGridView1.DataSource = ds.Tables("staff").DefaultView 'Assign DataView to grid
    'Me.DataGridView1.DataMember = "staff"      'No need when using DataView

End Sub 

txtSearch_TextChanged и btnUpdate_ClickEvent уже верны. Первый фильтр с использованием DataView, второй обновление базы данных с использованием DataSet.

...