У меня есть куча кода, который выглядит следующим образом:
if (stateTax > 0)
{
tr = new TableRow();
tbl.Rows.Add(tr);
td = new TableCell();
td.CssClass = "stdLabel";
td.Text = "NY State Tax";
tr.Cells.Add(td);
td = new TableCell();
td.Text = string.Format("{0:C}", stateTax);
td.CssClass = "justRight";
tr.Cells.Add(td);
}
Это ужасный хэш данных и макета, но создание специального класса или элемента управления каждый раз, когда происходит что-то подобное, выглядит почти так же плохо.
Обычно я пишу вспомогательную функцию, которая лаконична, но безобразна:
if (stateTax > 0)
MakeRow(tbl, "NY State Tax", "stdLabel",
string.Format("{0:C}", stateTax), "justRight");
А теперь я думаю: разве я не делал это раньше 100 раз? Разве нет более современного способа?
Просто чтобы быть в явном виде: это целый список разных меток и значений. Они не поступают из какого-либо конкретного источника данных, и правила, когда строки должны подавляться, различаются. В этом примере есть только два столбца, но у меня есть другие места с более.
Отредактировано, чтобы подчеркнуть: этот тип данных не естественно подходит для Repeater или GridView.
Я использую Повторитель для Товаров в ShoppingCart, это простой список. Это не такой список, это то, что приходит после : государственная пошлина, городской налог, доставка, скидки, специальные инструкции, подарочные этикетки и пояснительный шаблон. Весьма разное, часто необязательное, но должна быть какая-то организационная структура или она выглядит неправильно.
Я мог бы создать какой-нибудь собственный Список и выгружать все, чтобы я мог использовать Repeater, а иногда я делаю это; но это все еще хак.
Полагаю, я мог бы сделать каждый элемент Control
с Visible = false
, а затем показать, что нужно во время выполнения. Но это все еще похоже на большое количество кода для размещения небольшого статического текста.