2009-06-04 58 views
0

我有一个Gridview,我创建了一个连接到RowDataBound事件的动态页脚。请参阅动态创建的GridView中的页脚值VB VB

但有50/50的机会,其中3列没有数据。

我希望能够动态地隐藏没有数据的列,如果可能的话。

我已经尝试在RowDatabound事件中通过检查值是否为0但是不起作用,因为我认为事件被调用提前?

有没有办法在所有数据绑定后引用页脚行中的值?

在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

如果包含代码可能会有帮助。 – Bryan 2009-06-04 19:04:53

+0

你还使用.net吗?或只是asp? – Bryan 2009-06-04 19:09:59

+0

是的。发布你的代码。我敢肯定,我可以帮助.... – Eric 2009-06-04 19:29:54

回答

0

如果我正确理解你问,那么你想要的代码看起来应该是这样的(我使用vb.net 2008年,最近的项目我有一个网格观点的DataGridView如果您使用的aspx然后让我知道,我会为它生成一些代码):

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

这当然是代号为网格填充后。

这里是你可以把你的GridView后您的aspx.vb文件中的代码被完全加载:

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

如果你想为你填充GridView中隐藏的列,那么你将不得不忍受你的代码。

0

在RowCreated中尝试此操作。这是我的猜测,无法看到你的任何代码。

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