我正在尝试根据单元格的文本值设置tablecells的样式。这是在特定字段上完成以吸引用户注意这些tablecells托管在formview内,其中包含一个asp:table对象的itemTemplate。单元格有一个ID,并设置为在服务器端运行,以便我可以从代码隐藏中获取它们。
我试图通过处理tablecell的onDatabound,onPrerender,onLoad事件来挂钩各个单元格。 onPreRender用于我的代码片段,但所有三个tablecell事件的结果都相同。在处理这些事件时,我总是有一个text.empty用于text属性而不是实际值(即使在调用databind之后)。因为我没有实际值,我的比较没有通过,我的颜色样式没有按照需要设置。
编辑:我也试过处理我的formview的数据绑定事件来获取我的单元格值。那里也没有运气。
以下是相关标记:
<asp:FormView ID="fvShipments" runat="server" DefaultMode="readonly">
<ItemTemplate>
<asp:Table ID="tblShipments" runat="server" GridLines="Both">
<asp:TableRow runat="server">
<asp:TableCell runat="server" ID="tbcCartonSizeOverride" CssClass="table-displayrow centerText" OnPreRender="tbcCartonSizeOverride_PreRender"><%#Eval("CartonSizeOverRide")%></asp:TableCell>
这是相关的代码隐藏
Protected Sub tbcCartonSizeOverride_PreRender(sender As Object, e As EventArgs)
markAflag(CType(sender, TableCell))
End Sub
Private Sub markAflag(ByRef cell As TableCell)
If cell.Text.Trim.Length > 0 Then
cell.BackColor = Drawing.Color.Orange
Else
cell.BackColor = Drawing.Color.White
End If
End Sub
我不明白为什么这不起作用。除非我的Eval标记在预渲染事件之后解决了吗?
感谢阅读。我不经常使用asp,所以我可能会在这里遇到一些简单的混淆。
答案 0 :(得分:0)
好的我通过在我的formview对象上设置一些datakeys并在运行时执行findcontrol调用以获取对页面上的表的引用来解决此问题。这是一些示例代码,演示了我的所作所为。
Private Sub colorReturncode()
Dim schedreturncode As Integer
schedreturncode = FormView1.DataKey(1)
Dim qtable As New Table
qtable = CType(FormView1.FindControl("table1"), Table)
If schedreturncode = 0 Then
qtable.Rows(4).Cells(2).BackColor = System.Drawing.Color.Green
qtable.Rows(4).Cells(2).ForeColor = System.Drawing.Color.White
ElseIf schedreturncode = -1 Then
qtable.Rows(4).Cells(2).BackColor = System.Drawing.Color.White
Else
qtable.Rows(4).Cells(2).BackColor = System.Drawing.Color.Red
qtable.Rows(4).Cells(2).ForeColor = System.Drawing.Color.White
End If
End Sub