2011-09-01 66 views
2

我有一个简单的ASP.NET表所示:如何隐藏asp:表中的列?

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

的ID是由与实际表有几个列。我希望能够从代码隐藏(不是JavaScript)中以编程方式隐藏任何列。这可能吗?在这一点上,我可以很容易地将标记更改为几乎任何我想要的,所以我愿意接受建议。

编辑:对不起,很清楚。我希望能够以这种方式隐藏列,如果我添加一个新行,我不想更改处理隐藏的任何代码。理想情况是这样的:

tbl.Columns["ColName"].Visible = false; 

较不理想的是会做一些类似的for/foreach循环。

回答

4

尝试使用该扩展方法,它扩展了表类,添加方法来隐藏由索引和由TableHeaderCell的ID(如果存在的话)的列:

注意然而,它不提供任何逻辑以配合其跨越其他 列列:

实例

tbl.HideColumn("HeaderID"); 
tbl.HideColumn(0); 

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

标记:

<asp:Table id="tbl" runat="server"> <---! 
    <asp:TableHeaderRow id="header"> 
     <asp:TableHeaderCell id="hcell1" /> 
    </asp:TableHeaderRow> 
    <asp:TableRow id="row"> 
     <asp:TableCell id="cell1" /> 
    </asp:TableRow> 
</asp:Table> 

代码隐藏:

foreach(TableRow row in tb1.Rows) 
{ 
    if (row.Columns.Count >= x + 1) 
     row.Columns[x].Visible = false; 
} 
+0

设置'cell1.Visible = FALSE;'只会隐藏单元格。我想隐藏栏目。此外,我更喜欢我可以使用列的名称,而不必依赖于幻数。 – Mykroft

+0

@Mykroft:我更新了我的答案 – abatishchev

2

放RUNAT = “服务器” 上的所有标签,然后在后面的代码,你可以做[控件ID]。可见=假;

1

如果您打算使用内置的删除/编辑/选择命令,并且想要隐藏ID列,那么最好在文体上隐藏它。

下面是函数我用

static public void HideColumn(GridView gv, int columnIndex) 
{ 
    if (gv.HeaderRow != null) 
     gv.HeaderRow.Cells[columnIndex].Style.Add("display", "none"); 
    foreach (GridViewRow row in gv.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
      row.Cells[columnIndex].Style.Add("display", "none"); 
    } 
} 

编辑 除了这家伙

static public int GetColumnIndex(GridView gv, string columnName) 
{ 
    int returnMe = -1; 
    for (int i = 0; i < gv.Columns.Count; i++) 
    { 
     if (gv.Columns[i].HeaderText == columnName) 
     { 
      returnMe = i; 
      break; 
     } 
    } 
    return returnMe; 
}