我在这里有一堆代码看起来像这样:
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);
}
Run Code Online (Sandbox Code Playgroud)
这是一个可怕的数据和布局哈希,但是每当这样的事情出现时创建一个特殊的类或控件似乎差不多.
我通常做的是编写一个简洁但丑陋的辅助函数:
if (stateTax > 0)
MakeRow(tbl, "NY State Tax", "stdLabel",
string.Format("{0:C}", stateTax), "justRight");
Run Code Online (Sandbox Code Playgroud)
而现在我在想:我以前没有这样做过100次吗?是不是有更现代的方式?
只是为了明确:它是各种标签和价值的完整列表.它们不是来自任何特定的数据源,并且应该抑制行的规则各不相同.这个例子只有两列,但我有其他地方有更多.
编辑强调:这种数据自然不适合Repeater或GridView.
我在ShoppingCart中使用Repeater作为Items,这是一个简单的列表.这不是一个列表,它是后来的:州税,城市税,运输,折扣,特别说明,礼品标签和解释性样板.非常杂项,通常是可选的,但需要某种组织布局或看起来不对.
我可以创建一个自定义列表,并将所有内容转储,以便我可以使用中继器,有时候我会这样做; 但它仍然是一个黑客.
我想我可以让每个项目Control,用Visible = false,进而揭示什么需要在运行时.但它仍然感觉像是编写了一些静态文本.