Use a strongly typed dataset including both the Routes and RouteInvoices tables.
Define the relation between the Route and RouteInvoices tables. VisualStudio will probably call it FK_Routes_RouteInvoices.
I would include code for this but I always do it through the designer.
Then, you can add an expression column to the RouteInvoicesTable
routeDS.RouteInvoices.Columns.Add("RouteName", typeof(string), "Parent(FK_Routes_RouteInvoices).RouteName");
Now, if you load all your routes into the Routes table of the strongly typed DataSet and any invoices you are working with into the RouteInvoices table there will automatically be an 'extra' column in RouteInvoices named RouteName that you can display in the DataGrid and will automatically look up the route name for you when accessed.
I have seen solutions posted elsewhere that skip adding the new column and instead just place "Parent(FK_Routes_RouteInvoices).RouteName" as the DataPropertyName of a new column in the DataGridView. This has not worked when I have tried it however.
You can also leave out the "(FK_Routes_RouteInvoices)" part. That works so long as there is only one relation defined. If there are more than one you need to specify which relation.