GridView:如何隐藏模板字段列动态

时间:2017-10-07 17:29:25

标签: asp.net templates gridview field hide

我有一个带有模板字段的gridview。 gridview中的最后一行是一个总行,可以是正数或string.empty(= null)。这个想法如下:当总计row = null时,如何隐藏gridview的列? 效果应该是只有值可见的列。因为每次这是一个动态过程,输入(即一年)可能不同。 模板字段的示例:

       <asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
       <HeaderTemplate>
            <asp:LinkButton ID="H3" runat="server" ToolTip="Milano-Sanremo" CommandName="Sort" CommandArgument="Milaan-San Remo DESC" Text="MSR" />
       </HeaderTemplate>
       <ItemTemplate>
            <asp:Label ID="R3" runat="server" ToolTip="Milano-Sanremo" Text='<%# Eval("Milaan-San Remo") %>'></asp:Label>
       </ItemTemplate>
   </asp:TemplateField>

我尝试在代码隐藏中隐藏列的方式:

        Dim TotalColumns As Integer
    TotalColumns = GridView1.Rows(0).Cells.Count()

    For i As Integer = 0 To TotalColumns - 1
        If i > 4 Then
            For Each row As TableRow In GridView1.Rows
                If row.Cells(2).Text = "Nmbr of Riders" Then
                    Dim lid As String = DirectCast(row.FindControl("R3"), Label).Text
                    If lid = String.Empty Then
                        GridView1.Columns(i).Visible = True
                    Else
                        GridView1.Columns(i).Visible = False
                    End If
                End If
            Next
        End If
    Next

文本“骑士的Nmbr”表示总计行。 R3对应于上面的模板字段。代码位于Gridview的DataBound事件中。 我尝试了很多其他解决方案但似乎没什么帮助。看起来asp.net在表格单元格中看不到任何值,但也许我错了。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

检查GridView数据源。在DataBind()之后,隐藏列。

GridView1.DataSource = dataSource;
GridView1.DataBind();

// Hide last column
GridView1.Colums[GridView1.Columns.Count - 1].Visible = dataSource.Any(c => c.Nbmr > 0);

我不知道您的数据源结构。条件可能会根据您的数据源而变化。