Accessing Controls Within A Gridview
- by Bunch
Sometimes you need to access a control within a GridView, but it isn’t quite  as straight forward as just using FindControl to grab the control like you can  in a FormView. Since the GridView builds multiple rows the key is to specify the  row. In this example there is a GridView with a control for a player’s errors.  If the errors is greater than 9 the GridView should display the control  (lblErrors) in red so it stands out. Here is the GridView:
<asp:GridView ID="gvFielding" runat="server" DataSourceID="sqlFielding"  DataKeyNames="PlayerID" AutoGenerateColumns="false" >
     <Columns>
        <asp:BoundField DataField="PlayerName"  HeaderText="Player Name" />
        <asp:BoundField  DataField="PlayerNumber" HeaderText="Player Number" />
         <asp:TemplateField HeaderText="Errors">
             <ItemTemplate>
                <asp:Label ID="lblErrors"  runat="server" Text='<%# EVAL("Errors") %>'  />
             </ItemTemplate>
        </asp:TemplateField>
     </Columns>
</asp:GridView>
In the code behind you can add the code to change the label’s ForeColor  property to red based on the amount of errors. In this case 10 or more errors  triggers the color change.
Protected Sub gvFielding_DataBound(ByVal sender As Object, ByVal e As  System.EventArgs) Handles gvFielding.DataBound
    Dim errorLabel As  Label
    Dim errors As Integer
    Dim i As Integer = 0
    For Each  row As GridViewRow In gvFielding.Rows
        errorLabel =  gvFielding.Rows(i).FindControl("lblErrors")
        If Not errorLabel.Text =  Nothing Then
            Integer.TryParse(errorLabel.Text,  errors)
            If errors > 9 Then
                 errorLabel.ForeColor = Drawing.Color.Red
            End If
        End  If
        i += 1
    Next
End Sub
The main points in the DataBound sub is use a For Each statement to loop  through the rows and to increment the variable i so you loop through every row.  That way you check each one and if the value is greater than 9 the label changes  to red. The If Not errorLabel.Text = Nothing line is there as a check in case no  data comes back at all for Errors.
Technorati Tags: GridView,ASP.Net,VB.Net