2009-06-04 4 views
0

J'ai un Gridview que je crée un pied de page dynamique câblé à l'événement RowDataBound.Reportez-vous à la valeur Pied de page dans GridView créé dynamiquement ASP VB

Cependant, il y a une probabilité de 50/50 que 3 des colonnes n'aient aucune donnée.

Je souhaite pouvoir masquer de manière dynamique les colonnes sans données, si possible.

J'ai essayé de le faire dans l'événement RowDatabound en vérifiant si la valeur est = 0 mais cela ne fonctionne pas parce que je pense que l'événement est appelé au début? Y at-il un moyen de faire référence aux valeurs dans la ligne Pied de page après que toutes les données ont été liées?

Idéalement situé dans VB

`Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 




    If e.Row.RowType = DataControlRowType.DataRow Then 
     TotalOffered += DataBinder.Eval(e.Row.DataItem, "Offered") 
     TotalHandled += DataBinder.Eval(e.Row.DataItem, "Handled") 
     TotalHandled30 += DataBinder.Eval(e.Row.DataItem, "Handled30") 
     TotalHandlingTime += (DataBinder.Eval(e.Row.DataItem, "AHT") * DataBinder.Eval(e.Row.DataItem, "Handled")) 
     TotalTalkTime += ((DataBinder.Eval(e.Row.DataItem, "AHT") * DataBinder.Eval(e.Row.DataItem, "Talk"))) * DataBinder.Eval(e.Row.DataItem, "Handled") 
     TotalHoldTime += ((DataBinder.Eval(e.Row.DataItem, "AHT") * DataBinder.Eval(e.Row.DataItem, "Hold"))) * DataBinder.Eval(e.Row.DataItem, "Handled") 
     TotalWrapTime += ((DataBinder.Eval(e.Row.DataItem, "AHT") * DataBinder.Eval(e.Row.DataItem, "Work"))) * DataBinder.Eval(e.Row.DataItem, "Handled") 

     ' If there is agent data calculate a running total 
     If IsDBNull(DataBinder.Eval(e.Row.DataItem, "Pri_Agent_Sign_in")) Then 
      GridView1.Columns(0).Visible = False 


     Else 
      TotalSignedin += DataBinder.Eval(e.Row.DataItem, "Pri_Agent_Sign_in") 
      TotalAvail += DataBinder.Eval(e.Row.DataItem, "Pri_Agent_Sign_in") * DataBinder.Eval(e.Row.DataItem, "Avail_Time") 
      TotalIdle += DataBinder.Eval(e.Row.DataItem, "Pri_Agent_Sign_in") * DataBinder.Eval(e.Row.DataItem, "Unavail_Time") 



     End If 

     ' If there is forecast data calculate a running total 

     If IsDBNull(DataBinder.Eval(e.Row.DataItem, "ORG_FOR_VOL")) Then 


     Else 
      TotalForecastVolume += DataBinder.Eval(e.Row.DataItem, "ORG_FOR_VOL") 
      TotalForecastAHT += DataBinder.Eval(e.Row.DataItem, "ORG_FOR_VOL") * DataBinder.Eval(e.Row.DataItem, "ORG_FOR_AHT") 
     End If 



    ElseIf e.Row.RowType = DataControlRowType.Footer Then 
     e.Row.Cells(0).Text = "Totals : " 
     e.Row.Cells(1).Text = TotalOffered.ToString 
     e.Row.Cells(2).Text = TotalHandled.ToString 
     e.Row.Cells(3).Text = TotalHandled30.ToString 
     e.Row.Cells(4).Text = (TotalHandled/TotalOffered).ToString("#0%") 
     e.Row.Cells(5).Text = (TotalHandled30/TotalHandled).ToString("#0%") 
     e.Row.Cells(6).Text = (TotalHandlingTime/TotalHandled).ToString("N0") 
     e.Row.Cells(7).Text = (TotalTalkTime/TotalHandlingTime).ToString("#0%") 
     e.Row.Cells(8).Text = (TotalHoldTime/TotalHandlingTime).ToString("#0%") 
     e.Row.Cells(9).Text = (TotalWrapTime/TotalHandlingTime).ToString("#0%") 


     ' If agent data then add total data to footer 
     If TotalSignedin = 0 Then 

     Else 

      e.Row.Cells(11).Text = (TotalAvail/TotalSignedin).ToString("#0%") 
      e.Row.Cells(12).Text = (TotalIdle/TotalSignedin).ToString("#0%") 
      e.Row.Cells(12).HorizontalAlign = HorizontalAlign.Center 

     End If 

     If TotalForecastVolume = 0 Then 

     Else 

      e.Row.Cells(13).Text = TotalForecastVolume.ToString 
      e.Row.Cells(14).Text = (TotalForecastAHT/TotalForecastVolume).ToString("F0") 

     End If 

    End If` 
+0

Il peut être utile d'inclure votre code. – Bryan

+0

Également utilisez-vous. Net? ou juste asp? – Bryan

+0

oui. Postez votre code. Je suis sûr que je peux aider .... – Eric

Répondre

0

Si je comprends bien ce que votre demande, le code que vous voulez devrait ressembler à ceci (j'utilise vb.net 2008 et l'élément le plus proche, je dois une grille vue est DataGridView si vous utilisez ASPX alors laissez-moi savoir et je vais générer un code pour cela).

For i = 0 To DataGridView1.ColumnCount - 1 
     If DataGridView1.Rows(0).Cells(i).Value = "" Then 
      DataGridView1.Columns(i).Visible = False 
     End If 
    Next 

Ceci est le code de cours pour après la grille est remplie.

Voici le code que vous pouvez mettre dans votre fichier aspx.vb après votre GridView est complètement chargée:

For i = 0 To GridView1.Columns.Count - 1 
     If GridView1.FooterRow.Cells(i).Text = "" Then 
      GridView1.Columns(0).Visible = False 
     End If 
    Next 

Si vous souhaitez masquer la colonne que vous remplissez le gridview alors vous devrez mettre en place votre code.

+0

Désolé, oui j'utilise ASPX, est-ce que je le mets dans l'événement Row Databound? Je cherche spécifiquement à aborder la rangée de pied de page? –

+0

donnez-moi quelques minutes pour télécharger la version express pour aspx sur mon ordinateur de travail et essayer de télécharger du code pour celui-ci si personne ne vous a donné une bonne solution d'ici là. – Bryan

+0

Vous mettriez cela juste après le chargement de GridView. Si vous savez que toutes les lignes, ou même une ligne, ne contiennent rien, et si c'est bien le critère que vous voulez utiliser pour rendre la colonne invisible, je ne vois pas pourquoi il est nécessaire d'accéder aux données du pied de page . Cependant, le développeur Web vient de terminer le téléchargement, donc je vais le regarder maintenant. – Bryan

0

Essayez ceci dans RowCreated. C'est ma conjecture sans pouvoir voir aucun de votre code.

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated 
    If e.Row.RowType = DataControlRowType.Footer Then 
     If e.Row.Cells(0).Text = "" Then 
      GridView1.Columns(0).Visible = False 
     End If 
    End If 
End Sub 
+0

Cela renvoie une erreur me disant ArgumentException: Colonne 'X' n'appartient pas à la table DefaultView –

+0

pouvez-vous mettre les colonnes qui peuvent ou ne peuvent pas être là dans un champ de modèle? consultez ce lien forums.asp.net/p/1074931/1577355.aspx – Eric

Questions connexes