.Net中的替代方案可以手动构建Tables / TR / TD吗?

时间:2010-06-03 21:18:45

标签: .net webforms

我这里有一堆代码如下:

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,然后在运行时显示需要的内容。但是,它仍然需要大量编写一些静态文本。

4 个答案:

答案 0 :(得分:6)

您可以在ASP.NET中查看GridView

答案 1 :(得分:2)

尽可能避免将代码隐藏逻辑与表示内容捆绑在一起。 在这种特殊情况下,您可以使用Repeater实现相同的目标

你可以在这看一个相当简单的例子......

http://articles.sitepoint.com/article/asp-net-repeater-control

答案 2 :(得分:0)

您可能希望转而研究与GridView控件的绑定。

然而,我再也不会使用这种模式了。现在我的所有网格都是基于JavaScript的,并使用Ajax来检索要加载到它们中的数据。

答案 3 :(得分:-1)

我可以想到两种方法可以完成你想要做的事情......

  1. 制作用户控件或自定义控件,并将数据写入其中包含的属性。

  2. 只需在页面上放置一个Literal控件,然后在编写页面时将其填满。字面意思与文字完全一样。如果你将它的文本属性设置为...“hello world”,这正是html的内容,当页面呈现时,你会看到一个包含文本'hello world'的单行表。

    < / LI>