об обновлении данных в datagridview и фильтре

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

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

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

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

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


person user1151874    schedule 30.01.2012    source источник


Ответы (1)


Вы должны использовать 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.

person Flaick    schedule 31.01.2012