The simplest approach would be to call the load method again. i.e. in your btn_save click handler just call the showitems method.
Some recommendations.
You have not got any try catches around some of the statements. Exceptions could occur and not be handled.
You have duplicate code for creating command object, connection etc. Try to think of ways to separate the logic so that you only have one function that returns the new command object thus removing duplicate code.
Hope this helps!
UPDATE
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If inc <> -1 Then
Dim cmd As New OleDb.OleDbCommand(sql, con)
Dim data As Byte() = File.ReadAllBytes(OpenFileDialog1.FileName)
con.Open()
sql = "INSERT INTO CONTACTS(AGENTNUMBER,FIRSTNAME,MIDDLENAME,SURNAME,GENDER,EMAIL,PHONE,ADDRESS,NOTES,PICTURE)"
sql = sql & "VALUES(@AGENTNUMBER,@FIRSTNAME,@MIDDLENAME,@SURNAME,@GENDER,@EMAIL,@PHONE,@ADDRESS,@NOTES,@PICTURE)"
cmd.CommandText = sql
cmd.Connection = con
cmd.Parameters.AddWithValue("@AGENTNUMBER", txtAgentNumber.Text)
cmd.Parameters.AddWithValue("@FIRSTNAME", txtFirstName.Text)
cmd.Parameters.AddWithValue("@MIDDLENAME", txtMiddleName.Text)
cmd.Parameters.AddWithValue("@SURNAME", txtSurName.Text)
cmd.Parameters.AddWithValue("@GENDER", cboGender.Text)
cmd.Parameters.AddWithValue("@EMAIL", txtEmail.Text)
cmd.Parameters.AddWithValue("@PHONE", txtPhone.Text)
cmd.Parameters.AddWithValue("@ADDRESS", txtAddress.Text)
cmd.Parameters.AddWithValue("@NOTES", txtNotes.Text)
cmd.Parameters.AddWithValue("@PICTURE", data)
cmd.ExecuteNonQuery()
cmd.Dispose()
MsgBox("NEW RECORD ADDED")
ds.AcceptChanges()
btnSave.Enabled = False
btnAdd.Enabled = True
btnEdit.Enabled = True
btnDelete.Enabled = True
Showitems()
End If
End Sub