2010-10-25 5 views
4

я следующую строку таблицы на моей странице .aspx:Динамическое изменение ячейки таблицы цвета фона в asp.net

<tr> 
     <td valign="bottom" style="width: 157px">Initial Requirements:&nbsp;&nbsp;&nbsp;&nbsp;</td> 
     <asp:Repeater ID="Repeater11" runat="server" DataSourceID="ObjectDataSource1"> 

     <ItemTemplate> 
     <td valign="bottom" id="ReqStatus" runat="server" style="background-color: Gray"> 
     <%#ReqStatus(CType(CType(Container.DataItem, System.Data.DataRowView).Row, DataSet1.DataTable1Row))%> 

     </td> 

     </ItemTemplate> 
     </asp:Repeater> 

     </tr> 

В коде позади меня есть эта функция:

Protected Function ReqStatus(ByVal Project As DataSet1.DataTable1Row) As String 
     'Dim ReqTableCell As TableCell 
     'ReqTableCell = form1.FindControl("ReqStatus") 


     ' Check the status of the Development Completed 
     Dim rightNow As Date = Now() 
     Dim dateDifference As TimeSpan 
     If Not Project.IsNull("Requirements_Target") Then 

      Dim ReqTargetDate As Date = Project.Requirements_Target 

      If Project.IsNull("Req_Date") Then 
       dateDifference = ReqTargetDate.Subtract(rightNow) 

       If dateDifference.Days > 0 Then 

        If dateDifference.Days >= 60 Then 
         'ReqTableCell.BackColor = Drawing.Color.Green 
         Return "<strong><font color='green'>" & dateDifference.Days & "</font></strong>" 
        ElseIf dateDifference.Days > 30 And dateDifference.Days < 60 Then 
         'ReqTableCell.BackColor = Drawing.Color.Yellow 
         Return "<strong><font color='yellow'>" & dateDifference.Days & "</font></strong>" 
        Else 

         'ReqTableCell.BackColor = Drawing.Color.Red 
         Return "<strong><font color='red'>" & dateDifference.Days & "</font></strong>" 
        End If 

       Else 
        'ReqTableCell.BackColor = Drawing.Color.Red 
        Dim pastDue As Int16 = (dateDifference.Days * -1) 
        Return "<strong><font color='red'>" & pastDue & "</font></strong> days past" 

       End If 
      End If 
     Else 

     End If 
    End Function 

I может изменить цвет возвращаемого значения на основе условных операторов, но не может определить правильный синтаксис для изменения основного поля ячейки таблицы. Моя попытка прокомментирована.

Как правильно объявить ячейку таблицы? Findcontrol не должен быть правильным.

ответ

1

Вы можете сделать это в CodeBehind с полным контролем (тестировался, только чтобы дать вам идею):

Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound 
     Select Case e.Item.ItemType 
      Case ListItemType.Item 
       Dim Project As DataSet1.DataTable1Row = DirectCast(DirectCast(e.Item.DataItem, System.Data.DataRowView).Row, DataSet1.DataTable1Row) 
       Dim tdReqStatus As HtmlTableCell = DirectCast(e.Item.FindControl("tdReqStatus"), HtmlTableCell) 
       Dim lblReqStatus As Label = DirectCast(e.Item.FindControl("lblReqStatus"), Label) 
       ' Check the status of the Development Completed 
       Dim rightNow As Date = Now() 
       Dim dateDifference As TimeSpan 
       If Not Project.IsNull("Requirements_Target") Then 
        Dim ReqTargetDate As Date = Project.Requirements_Target 
        If Project.IsNull("Req_Date") Then 
         dateDifference = ReqTargetDate.Subtract(rightNow) 
         lblReqStatus.Font.Bold = True 

         If dateDifference.Days > 0 Then 

          If dateDifference.Days >= 60 Then 
           tdReqStatus.BgColor = "Green" 
           lblReqStatus.Text = dateDifference.Days.ToString 
          ElseIf dateDifference.Days > 30 And dateDifference.Days < 60 Then 
           tdReqStatus.BgColor = "Yellow" 
           lblReqStatus.Text = dateDifference.Days.ToString 
          Else 
           tdReqStatus.BgColor = "Red" 
           lblReqStatus.Text = dateDifference.Days.ToString 
          End If 

         Else 
          tdReqStatus.BgColor = "Red" 
          lblReqStatus.Text = (dateDifference.Days * -1).ToString 
         End If 
        End If 
       End If 
     End Select 
    End Sub 

и на ASPX:

<table> 
    <asp:Repeater ID="Repeater1" runat="server"> 
     <ItemTemplate> 
      <tr> 
      <td valign="bottom" id="TdReqStatus" runat="server" > 
       <asp:label ID="lblReqStatus" runat="server" ></asp:label> 
      </td> 
      </tr> 
     </ItemTemplate> 
    </asp:Repeater> 
    </table> 
1

Посмотрите это отсекать мое решение:

TableRow tr = new TableRow(); 
TableCell tc = new TableCell { Text = "someText"}; 

tc.BackColor = ColorTranslator.FromHtml("#0000FF"); 
tc.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); 
tc.Font.Bold = true; 
tc.Font.Size = 16; 

tr.Cells.Add(tc); 
table.Rows.Add(tr); 

После этого и контроля всех операторов вы можете отобразить таблицу на веб-странице.

Смежные вопросы