2017-10-07 9 views
0

J'ai une vue de grille avec des champs de modèle. La dernière ligne de la grille est une ligne de totaux qui peut être positive ou string.empty (= null). L'idée est la suivante: comment puis-je cacher une colonne de la grille lorsque la ligne de totaux = null? L'effet devrait être que seules les colonnes avec des valeurs sont visibles. Parce que l'entrée (c'est-à-dire une année) peut être différente chaque fois que c'est un processus dynamique. Un exemple d'un champ de modèle:GridView: comment masquer une colonne de champ de modèle dynamique

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

Et la façon dont j'ai essayé de cacher la colonne codebehind:

 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 

Le texte « NMBR Riders » indique la ligne des totaux. R3 correspond au champ de modèle ci-dessus. Le code est dans l'événement DataBound du Gridview. J'ai essayé beaucoup d'autres solutions mais rien ne semble aider. Il semble que asp.net ne voit aucune valeur dans les cellules du tableau, mais peut-être que je me trompe. Toute aide serait grandement appréciée!

Répondre

0

Vérifiez la source de données GridView. Après DataBind(), masquez la colonne.

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

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

Je ne connais pas la structure de votre source de données. La condition peut changer en fonction de votre source de données.