动态地将表构建为占位符

本文关键字:占位符 构建 动态 | 更新日期: 2023-09-27 18:12:05

我试图在用户点击按钮时动态构建一个表。我要做的是有它,这样它就会首先建立表的标题。

我尝试这样做的代码如下。当用户点击create table按钮时这个方法会运行:

        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 | Machine Model

注意:"|"代表你应该在表中得到的列之间的分割。

正如你所看到的,它只会把它分成两列。我到底做错了什么,我该如何解决这个问题?

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

Update1 按要求

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

所有这些方法所做的就是创建一个标签并填充它的文本

动态地将表构建为占位符

在这种情况下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输出。

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

好的,所以我找到了使用占位符我以前,所以我想我会张贴它,以防其他人有这个问题。

    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);
    }

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