动态地将表构建到占位符中

时间:2011-10-21 17:38:17

标签: c# asp.net html web-services

我很擅长使用html和asp以及我:

所以我试图做的是在用户点击按钮时动态构建一个表。我想要做的是让它首先构建表的标题。

我尝试执行此操作的代码如下。因此,当用户点击创建表按钮时,将运行此方法:

        private void AddTableTitles()
    {
        Literal startRow = new Literal();
        startRow.Text = "<tr><th colspan=\"2\">";
        Literal Column = new Literal();
        Column.Text = "</th><th colspan=\"2\">";
        Literal endRow = new Literal();
        endRow.Text = "</th></tr>";

        AssignPlaceHolder.Controls.Add(startRow);
        AssignPlaceHolder.Controls.Add(AddSiteHeader());
        AssignPlaceHolder.Controls.Add(Column);
        AssignPlaceHolder.Controls.Add(AddMachNameHeader());
        AssignPlaceHolder.Controls.Add(Column);
        AssignPlaceHolder.Controls.Add(AddMachTypeHeader());
        AssignPlaceHolder.Controls.Add(Column);
        AssignPlaceHolder.Controls.Add(AddMachModelHeader());
        AssignPlaceHolder.Controls.Add(endRow);
    }

注意:AssignPlaceHolder只是将给定的项目放入页面。代码就在这里:

        public PlaceHolder AssignPlaceHolders
    {
        get { return this.AssignPlaceHolder; }
    }

所以我想要的就是这样。

  

网站|机器名称|机器类型|机器模型

然而,

作为表格标题,这是我最终得到的:

  

SiteMachine NameMachine Type |机器模型

注意:“|”表示您应该在表中获得的列之间的分割。

如您所见,它只会将其拆分为两列。我究竟做错了什么以及如何解决这个问题?

注意:我知道我可以对这部分进行硬编码,但是通过弄清楚如何让这部分以这种方式工作,我将能够解决我在我的表的动态部分中遇到的问题输入的物品数量由存储在数据库中的机器数量决定,同样的事情发生在它上面。

UPDATE1 根据要求

        private Label AddSiteHeader()
    {
        Label label = new Label();
        label.ForeColor = System.Drawing.Color.DarkBlue;
        label.Text = "Site ";
        return label;
    }

所有这些方法都是创建标签并为其填充文本。

非常感谢任何帮助或建议。

谢谢

2 个答案:

答案 0 :(得分:2)

在这种情况下,Repeater会更有用吗?

<asp:Repeater ID="yourTable" runat="server">
    <HeaderTemplate>
        <table>
            <tr>
                <th><%= AddSiteHeader() %></th>
                <th><%= AddMachTypeHeader() %></th>
                <th><%= AddMachModelHeader()%></th>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
            <tr>
                <td><%# Eval("Site") %></td>
                <td><%# Eval("MachType") %></td>
                <td><%# Eval("MachModel") %></td>
            </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

您可以将它绑定到您的数据源并为您节省大量工作,因为这样做正在做您正在做的事情。如果您只需要Repeater的HTML输出,并且想要提供输出并将其推送到div或其他内容,则可以预先渲染它并使用RenderControl方法获取HTML输出。 / p>

似乎解决方案是如何工作的是使用旧的ASP思维方式,而不是ASP.NET并利用它的优势。

答案 1 :(得分:1)

好吧所以我用我之前使用的占位符来计算它,所以我想我会发布它以防其他人有这个问题。

    private void AddTableTitles()
    {
        TableHeaderCell site  = new TableHeaderCell();
        TableHeaderCell name  = new TableHeaderCell();
        TableHeaderCell type  = new TableHeaderCell();
        TableHeaderCell model = new TableHeaderCell();
        TableHeaderRow  th    = new TableHeaderRow();

        site.Controls.Add(AddSiteHeader());            
        th.Controls.Add(site);
        //AssignPlaceHolder.Controls.Add(th);

        name.Controls.Add(AddMachNameHeader());            
        th.Controls.Add(name);
        //AssignPlaceHolder.Controls.Add(th);

        type.Controls.Add(AddMachTypeHeader());            
        th.Controls.Add(type);
        //AssignPlaceHolder.Controls.Add(th);

        model.Controls.Add(AddMachModelHeader());            
        th.Controls.Add(model);

        AssignPlaceHolder.Controls.Add(th);
    }

它最终成为一个简单的问题,只需为每列添加新的表格。