我知道这个问题之前已被问过几次,我尝试了很多建议的解决方案。我试图加粗我的GridView的每一行,其中包含文本“已获得”或“总计”(尚未添加“总计”代码)。我已经成功地获取了DataBound事件,并且我已经成功地识别出我用于遍历每一行和每列的2 For循环语句(我使用标签让我知道我访问过的代码块和计数是24行和9列),但由于某种原因,我用来专门确定单元格是否包含“获得”文本的代码不会触发。我不确定我做错了什么。有人可以看一看,帮助我理解我做错了什么吗?谢谢你的帮助!
这是我的GridView的ASP代码(对不起,不知道为什么它在多个块中):
<asp:GridView ID="gv_VacationDetails" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataSourceID="VacationDetails_DataSource" GridLines="Vertical" style="z-index: 1; left: 24px; top: 275px; position: absolute; height: 220px; width: 435px" ShowFooter="True" EnableViewState="True" AutoPostback="True" OnRowDataBound="gv_VacationDetails_DataBound">
<AlternatingRowStyle BackColor="#DCDCDC" />
<Columns>
<asp:TemplateField HeaderText="Action" SortExpression="Employee_Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Employee_Name") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="ddl_InsertVacAction" runat="server" OnSelectedIndexChanged="gv_VacationDetails_SelectedIndexChanged" EnableViewState="True" AutoPostback="True" TabIndex="1">
<asp:ListItem>Adjustments</asp:ListItem>
<asp:ListItem>Used</asp:ListItem>
</asp:DropDownList>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Employee_Name") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Wrap="False" />
</asp:TemplateField>
<asp:BoundField DataField="Unit_Area_ID" HeaderText="Unit_Area_ID" SortExpression="Unit_Area_ID" Visible="False" />
<asp:TemplateField HeaderText="Vacation (Days)" SortExpression="Vacation" FooterStyle-Width="133px" FooterStyle-Wrap="false">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Vacation")%'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txb_InsertVacHours" runat="server" Width="115px" TabIndex="2"></asp:TextBox>
<asp:RequiredFieldValidator ID="val_VacationTimeReq" runat="server" ControlToValidate="txb_InsertVacHours" ErrorMessage="Vacation Time is a required field. Please enter in DAYS." ForeColor="#FF3300" ValidationGroup="Vacation">*</asp:RequiredFieldValidator>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="Vacation Time - You can only enter a positive or negative number." ForeColor="Red" Operator="DataTypeCheck" Type="Double" ControlToValidate="txb_InsertVacHours" ValidationGroup="Vacation">*</asp:CompareValidator>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Vacation") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
<ItemStyle HorizontalAlign="Center" Wrap="False" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Used" SortExpression="Used_Date" FooterStyle-Wrap="false">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Used_Date") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="tbx_InsertVacUsed" runat="server" Width="115px" TabIndex="3"></asp:TextBox>
<asp:RegularExpressionValidator ID="Val_VacDateCheck" runat="server" ControlToValidate="tbx_InsertVacUsed" ErrorMessage="Vacation Used - Please enter the dat in format mm/dd/yyyy" ForeColor="#FF3300" ValidationExpression="^(0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d$" ValidationGroup="Vacation">*</asp:RegularExpressionValidator>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Used_Date", "{0:d}") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Updated" SortExpression="Update_Date">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Update_Date") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:Button ID="btn_InsertVacation" runat="server" CommandName="InsertVacation" Text="Add Action" TabIndex="4" />
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("Update_Date", "{0:d}") %>'></asp:Label>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
</asp:TemplateField>
<asp:BoundField DataField="First_Name" HeaderText="First_Name" SortExpression="First_Name" Visible="False" />
<asp:BoundField DataField="Last_Name" HeaderText="Last_Name" SortExpression="Last_Name" Visible="False" />
<asp:BoundField DataField="Unit_ID" HeaderText="Unit_ID" SortExpression="Unit_ID" Visible="False" />
<asp:BoundField DataField="HireRehire" HeaderText="HireRehire" SortExpression="HireRehire" Visible="False" />
<asp:BoundField DataField="Display_Year" HeaderText="Display_Year" SortExpression="Display_Year" Visible="False" />
</Columns>
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#0000A9" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#000065" />
</asp:GridView>
这是我的DataBound代码:
Public Sub gv_VacationDetails_DataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
Label6.Text = "Inside Bold"
'Label6.Text = gv_VacationDetails.Rows(1).Cells("Action").Text.ToString
Dim r As Integer
Dim c As Integer
For r = 0 To gv_VacationDetails.Rows.Count - 1
Label6.Text = "Inside ROW"
For c = 0 To gv_VacationDetails.Columns.Count - 1
Label6.Text = "Inside COLUMN"
Label7.Text = "Rows = " & CType(gv_VacationDetails.Rows.Count - 1, String) & "; Columns = " & CType(gv_VacationDetails.Columns.Count - 1, String)
If gv_VacationDetails.Rows(r).Cells(c).Text.Trim = "Earned" Then
Label6.Text = "Inside BOLD IF"
gv_VacationDetails.Rows(r).Cells(c).Font.Bold = True
'gv_VacationDetails.Rows(r).Cells(c).ForeColor = Drawing.Color.Red
End If
Next
Next
'For i = 1 To gv_VacationDetails.Rows.Count - 1
' 'Label6.Text = gv_VacationDetails.Rows(i).Cells(1).Text.ToString
' If gv_VacationDetails.Rows(i).Cells(0).Text = "Earned" Then
' Label6.Text = "Inside Bold IF"
' gv_VacationDetails.Rows(i).Font.Bold = True
' End If
'Next
'If e.Row.RowType = DataControlRowType.DataRow Then
' Label6.Text = "Inside Bold IF"
' Dim drv As DataRowView = CType(e.Row.DataItem, DataRowView)
' If CType(drv(0), String) = "Earned" Or CType(drv(0), String) = "Total Adjustments" Or _
' CType(drv(0), String) = "Total Used" Or CType(drv(0), String) = "Total Remaining" Then
' e.Row.Font.Bold = True
' End If
'End If
End Sub
答案 0 :(得分:2)
用于访问GridView行单元格的方法仅适用于绑定字段而非模板字段。要访问模板字段,您可以使用 Row.FindControl 方法。
请在您的gv_VacationDetails_DataBound方法中尝试此操作:
Public Sub gv_VacationDetails_DataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
'First you need to get the template fields, which are labels as in GridView your design
Dim Label1 As Label = DirectCast(e.Row.FindControl("Label1"), Label)
Dim Label2 As Label = DirectCast(e.Row.FindControl("Label2"), Label)
Dim Label3 As Label = DirectCast(e.Row.FindControl("Label3"), Label)
Dim Label4 As Label = DirectCast(e.Row.FindControl("Label4"), Label)
'Next you can check each field value
If Label1.Text = "Earned" Then
Label1.Font.Bold = True
End If
If Label2.Text = "Earned" Then
Label2.Font.Bold = True
End If
If Label3.Text = "Earned" Then
Label3.Font.Bold = True
End If
If Label4.Text = "Earned" Then
'Label6.Text = "Inside BOLD IF"
Label4.Font.Bold = True
End If
'You can check the bound fields by looping through row cells
For Each cell As TableCell In e.Row.Cells
If cell.Text = "Earned" Then
cell.Font.Bold = True
End If
Next
End If
End Sub