Problem 1
The data is not refreshed because the report still use the old datasource which was not refreshed. You should be able to get it by doing select again at the report refresh event.
Private Sub CRViewer_ReportRefresh(ByVal source As Object, ByVal e As CrystalDecisions.Windows.Forms.ViewerEventArgs) Handles CRViewer.ReportRefresh
populate_data()
End Sub
Public Sub populate_data()
Dim da As New MySqlDataAdapter("select * from v_masterfile", cn)
Dim tbl_new As New DataTable
da.Fill(tbl_new)
obj_masterfile.SetDataSource(tbl_new)
End Sub
I didn't try the code myself so adjust accordingly.
Problem 2
Well since you're getting the data programmatically then if you want to use different connection then you should be doing it at the connection initialization instead of at the report itself (before querying the database to get data).
What matter is the report got the datasource it requires and it would work like you have designed it.