Technically, this code has no nested loop, per se. However, it counts from 0 to 5 * 10 - 1, and in each iteration calculates the row and column indexes. The following is probably better understandable:
for (int i = 0; i < row * col; i++)
{
int rowIndex = i / col; // divide by column count = row index
int colIndex = i % col; // modulo by column count = column index
Console.WriteLine($"i: {i} => row: {rowIndex}, col: {colIndex}");
matrix[rowIndex, colIndex] = i + 1;
}
Write down the actual numbers and you will see for yourself that for iterations 0 to 9 you will get rowIndex == 0 and colIndex having values 0 to 9, then for iterations 10 to 19 you get rowIndex == 1 and colIndex having values 0 to 9 etc.
A nested-loop variant would, naturally, look like this:
for (int rowIndex = 0; rowIndex < row; rowIndex++)
{
for (int colIndex = 0; colIndex < col; colIndex++)
{
int i = rowIndex * col + colIndex; // back-calculate 'i'
Console.WriteLine($"i: {i} => row: {rowIndex}, col: {colIndex}");
matrix[rowIndex, colIndex] = i + 1;
}
The one-loop version has the nested look unrolled and replaced with mathematical operations (division, modulo) instead.