When you're working with bound data you should almost exclusively work with the BindingSource. That's what it's for. In this case the DataGridView is irrelevant.

Call the Find method of the BindingSource and it will return the index of the matching row if there is one. If there is, you index the BindingSource to get that row and update the appropriate fields. If there isn't, you call the AddNew method of the BindingSource to create a new row and set the appropriate fields.