我有一个Gridview,我创建了一个连接到RowDataBound事件的动态页脚。
然而,有三个列没有数据的可能性为50/50。
我希望能够在没有数据的情况下动态隐藏列。
我已经尝试在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 :(得分: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时隐藏列,则必须提交代码。
答案 1 :(得分: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