2009-06-04 2 views
0

У меня есть Gridview, что я создаю динамический нижний колонтитул, подключенный к событию RowDataBound.Обратитесь к значению Footer в GridView, созданном динамически ASP 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

+0

Также вы используете .net? или просто asp? – Bryan

+0

Да. разместите свой код. Я уверен, что смогу помочь .... – Eric

ответ

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 

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

Вот код, который вы можете поместить в файл 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 

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

+0

Извините, да, я использую ASPX, событие Row Databound? Я смотрю конкретно, чтобы обратиться к нижнему колонтитулу? –

+0

дайте мне несколько минут, чтобы загрузить экспресс-версию для aspx на мой рабочий компьютер и не пытайтесь загрузить какой-то код для него, если никто не дал вам хорошее решение к тому времени. – Bryan

+0

Вы поместили бы это сразу после загрузки GridView. Если вы знаете, что все строки или даже одна строка последовательно, в этом ничего не будет, и если это действительно критерии, которые вы хотите использовать, чтобы сделать столбец не видимым, я не вижу причин, по которым необходим доступ к данным нижнего колонтитула , Однако веб-разработчик только что закончил загрузку, поэтому я посмотрю на него сейчас. – Bryan

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

Это возвращает ошибку, сообщающую мне ArgumentException: Столбец «X» не относится к таблице DefaultView –

+0

, можете ли вы поместить столбцы, которые могут быть или не быть в поле шаблона? ознакомьтесь с этой ссылкой forums.asp.net/p/1074931/1577355.aspx – Eric