First of all, do this. Run the sample web application to see if you have the same results. I don't think that you will. If this is the case, we need to look at how your application is setup and why binding seems to be functioning differently within your application.Next, as for the editing the wrong record, I think that there is something wrong with your postback code that is repositioning the record. For example, if you add a new record, it will navigate to the new record and stop. So if the record position is moving, something has to be moving it. This logic is no different than WinForms.
If you have code in your Page_Load event, are you testing on Page.IsPostBack. This is just one idea of where things could be coming from. When you are dealing with a Web app, you have to take into consideration post backs when placing navigation code and so forth. I know that you know this, but I am just reiterating some common things that I have seen in the past.