I'd suggest having two edit boxes that reflect the contents of the currently selected row. Changing the contents of the edit box changes the table.
To add a new row, there could be a "ghost row" at the top. Clicking on it makes the edit boxes empty. Setting them to something creates a new row. Note that this would allow invalid rows (eg empty address), but that's OK, they can just be ignored in the rest of the code.