我这里有一堆代码如下:
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次吗?是不是有更现代的方式?
只是要明确:它是杂项标签和值的完整列表。它们不是来自任何特定的数据源,并且应该抑制行的规则各不相同。这个例子只有两列,但我有其他地方有更多。
编辑强调:此类数据不自然适合转发器或GridView。
我在ShoppingCart中使用Repeater作为Items,这是一个简单的列表。这是不这样的列表,它是之后的:州税,城市税,运费,折扣,特别说明,礼品标签和解释性样板。非常杂项,通常是可选的,但需要某种组织布局或看起来不对。
我可以创建某种自定义List并将所有内容转储,这样我就可以使用Repeater了,有时候我会这样做;但它仍然是一个黑客。
我想我可以使用Control
将每个项目设为Visible = false
,然后在运行时显示需要的内容。但是,它仍然需要大量编写一些静态文本。
答案 0 :(得分:6)
您可以在ASP.NET中查看GridView。
答案 1 :(得分:2)
尽可能避免将代码隐藏逻辑与表示内容捆绑在一起。 在这种特殊情况下,您可以使用Repeater实现相同的目标
你可以在这看一个相当简单的例子......
http://articles.sitepoint.com/article/asp-net-repeater-control
答案 2 :(得分:0)
您可能希望转而研究与GridView控件的绑定。
然而,我再也不会使用这种模式了。现在我的所有网格都是基于JavaScript的,并使用Ajax来检索要加载到它们中的数据。
答案 3 :(得分:-1)
我可以想到两种方法可以完成你想要做的事情......
制作用户控件或自定义控件,并将数据写入其中包含的属性。
只需在页面上放置一个Literal控件,然后在编写页面时将其填满。字面意思与文字完全一样。如果你将它的文本属性设置为...“hello world”,这正是html的内容,当页面呈现时,你会看到一个包含文本'hello world'的单行表。
< / LI> 醇>