Обратитесь к значению нижнего колонтитула в GridView, созданном динамически ASP VB - PullRequest
0 голосов
/ 04 июня 2009

У меня есть Gridview, в котором я создаю динамический нижний колонтитул, связанный с событием RowDataBound.

Однако существует вероятность 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`

Ответы [ 2 ]

0 голосов
/ 04 июня 2009

Попробуйте это в 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
0 голосов
/ 04 июня 2009

Если я правильно понимаю, о чем вы спрашиваете, то код, который вы хотите, должен выглядеть примерно так (я использую vb.net 2008, и ближайший элемент к представлению сетки - DataGridView. знаю, и я сгенерирую код для этого):

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

Это, конечно, код после заполнения сетки.

Вот код, который вы можете поместить в файл aspx.vb после полной загрузки GridView:

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

Если вы хотите скрыть столбец при заполнении сетки, вам придется поднять свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...