Не видя разметки, трудно сказать точно, но если вы скажете, что она хорошо меняет цену, но влияет только на слишком много строк, я бы посмотрел на селектор, который вы используете здесь:
var row = $(this).closest("table");
$("[id*=lblTotalCost]", row).html(parseFloat($("[id*=price]", row).html()) * parseFloat($(this).val()));
Переменная row
представляет собой целую таблицу, и затем вы находите все, где идентификатор содержит lblTotalCost
, похоже, что он возвращает все поля общей стоимости в таблице и устанавливает их все сразу.
Опять же, не видя разметки, трудно посоветовать, но, возможно, попробуйте изменить:
$(this).closest("table");
до:
$(this).closest("tr");
для ограничения объема кода после него.