Вам нужно использовать функцию string.Format (), чтобы она могла выполнять форматирование.Ваш код воспринимает формат как часть строки, а не как формат для форматирования.
string.Format("{0:C}", empList[x].grossP) ;
Кроме того, ваш код конкатенации очень сложен для чтения.Возможно, вы захотите рассмотреть другие параметры форматирования.
Строковая интерполяция.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
Строковое форматирование полностью и удаление ручной конкатенации.
https://docs.microsoft.com/en-us/dotnet/api/system.string.format?view=netframework-4.8
РЕДАКТИРОВАТЬ:
Поскольку это домашняя работа, я не думаю, что я должен дать прямой ответ.Тем не менее, вот пример, который должен помочь объяснить, что вам нужно сделать.По сути, вам нужно убедиться, что количество токенов, указанное в вашей строке для форматирования, соответствует количеству переданных аргументов.
string firstArgForFormatString = "part 1";
int secondArgForFormatString = 50;
decimal thirdArgForFormatString = 35.2m;
lblSomeLabel.Text += string.Format("first value will replace next token {0} and another value {1} and yet another value to format {2:C}.",
firstArgForFormatString,
secondArgForFormatString,
thirdArgForFormatString);