基于单元格内容的粗体网格视图行

时间:2014-04-04 13:35:09

标签: asp.net vb.net gridview

我知道这个问题之前已被问过几次,我尝试了很多建议的解决方案。我试图加粗我的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

1 个答案:

答案 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