In C#, all indexes are zero based. So if you have 16 rows in your DataGridView, then the valid indexes are 0 to 15 inclusive. Any attempt to access row 16 is doomed to failure, with or without a
try
...
catch
block.
A much better solution is to check how many rows exist, and use that number minus one as the "final row" index:
DataGridView.Rows[DataGridView.Rows.Count - 1].Selected = true;
But you shouldn't call your objects the same as the class name - it just gets confusing. Name then according to what they are used for:
ShowPictureInfo
for example, or perhaps
ShowImageSourceLocation
perhaps. But not
DataGridView
!