Я создаю приложение-фактуру и в разделе, где пользователь может вводить позиции, некоторые из полей будут включать: количество, цену, расширенную цену, описание и т.д.
Если пользователь вводит что-либо в любое из полей, необходимы соответствующие поля, но если в какое-либо поле не вводится никаких данных, в соответствующих полях ничего не требуется. Каков эффективный и чистый способ сделать это, не делая кучу утверждений if?
Я предполагаю, что это похоже на выполнение проверки, если только текстовое поле имеет текст.
Вы можете попробовать что-то подобное в событии ServerValidate для CustomValidator.
// test for all textboxes having some text in them...
e.IsValid = (from TextBox c in this.Controls
where c is TextBox
select c).All(tb => !string.IsNullOrEmpty(tb.Text));
Для этого может потребоваться некоторое вмешательство, чтобы получить право, но вы поняли эту идею. Измените в соответствии с тем, чтобы все текстовые поля были пустыми.
Вы также можете использовать jQuery для проверки на стороне клиента в вашем CustomValidator
function clientValidate(sender, e) {
// get array of textboxes with a common css class
var textBoxes = $("#SomeCssSelector input").val();
// loop here to test for having text or no text.
e.IsValid = ... ;
}
Вы можете создать массив TextBox и сохранить ссылки на все связанные текстовые поля в массиве. Когда вам это понадобится, вы можете перебирать массив в цикле for, ища первый элемент со значением. Как только вы найдете значение со значением, которое вам известно, все остальные элементы в этом массиве также нуждаются в значениях.
Кроме того, если у вас есть другие группы связанных текстовых полей, вы можете создать дополнительные массивы, чтобы сгруппировать их.
Несколько способов, если это ASP.NET.
Для Windows Forms также используйте контрольные проверки, или вы можете использовать простую функцию, в которой вы передаете массив управления. Если какой-либо элемент в массиве заполнен, он требует, чтобы все элементы были заполнены, возвращая поля, которые не заполнены, и т.д.