我有一个简单的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循环执行类似的操作。
尝试使用此扩展方法,它将扩展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)
| 归档时间: |
|
| 查看次数: |
16344 次 |
| 最近记录: |