如何在asp:Table中隐藏列?

Myk*_*oft 2 .net c# asp.net

我有一个简单的ASP.NET表,如下所示:

<asp:Table id="tbl">
    <asp:TableHeaderRow id="header">
        <asp:TableHeaderCell id="hcell1" />
    </asp:TableHeaderRow>
    <asp:TableRow id="row">
        <asp:TableCell id="cell1" />
    </asp:TableRow>
</asp:Table>
Run Code Online (Sandbox Code Playgroud)

ID已组成,实际表中还有更多列。我希望能够以编程方式从隐藏的代码中隐藏任何列(不是javascript)。这可能吗?在这一点上,我可以轻松地将标记更改为几乎任何所需的标记,因此我愿意接受建议。

编辑:很抱歉,请清除。我希望能够以这样一种方式简单地隐藏一列:如果我添加新行,则不需要更改任何用于处理隐藏的代码。理想的情况如下:

tbl.Columns["ColName"].Visible = false;
Run Code Online (Sandbox Code Playgroud)

不太理想的情况是for / foreach循环执行类似的操作。

jda*_*ies 5

尝试使用此扩展方法,它将扩展Table类,并添加方法以按索引和TableHeaderCell的ID(如果存在)隐藏列:

但是请注意,它不提供任何逻辑来满足跨其他列的列:

例子

tbl.HideColumn("HeaderID");
tbl.HideColumn(0);
Run Code Online (Sandbox Code Playgroud)

public static class TableExtensions
{
    public static void HideColumn(this Table table, int index)
    {
        foreach (TableRow row in table.Rows)
        {
            if (row.Cells.Count-1 >= index)
            {
                row.Cells[index].Visible = false;
            }
        }
    }

    public static void HideColumn(this Table table, string id)
    {
        int index = 0;
        bool columnFound = false;

        if (table.Rows.Count > 1)
        {
            TableHeaderRow headerRow = table.Rows[0] as TableHeaderRow;
            if (headerRow != null)
            {
                foreach (TableHeaderCell cell in headerRow.Cells)
                {
                    if (cell.ID.ToLower() == id.ToLower())
                    {
                        columnFound = true;
                        break;
                    }

                    index++;
                }
            }
        }

        if(columnFound)
            HideColumn(table, index);
    }
}
Run Code Online (Sandbox Code Playgroud)