coloring gridview rows dynamically

Hi,

In my gridview I want to color in green the rows for which the fielddate value is today and in orange the rows for which the fielddate value is tomorrow and later. The problem is that the following code works fine when binding the gridview because the code can find the label "lblDel" but fail when I edit the gridview because it can't find the the textbox "txtDel".

If I change the label by the text box them the gridview binding will fail.

Any idea how to code this?

Here is part of my code:

<asp:TemplateField SortExpression="DeliveryDate">
<ItemStyle wrap="false" Width="350px" />
<HeaderTemplate><asp:LinkButton ID="LinkButton5" runat="server" Text="DeliveryDate" CommandName="sort" CommandArgument="DeliveryDate"  /></HeaderTemplate>
<ItemStyle HorizontalAlign="left" Wrap="false"></ItemStyle>
<ItemTemplate><asp:Label ID="lblDel" Text='<%#Eval("DeliveryDate","{0:dd/mm/yyyy}")%>' runat="server" Width="150px" /></ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtDel" Text='<%# Bind("DeliveryDate","{0:dd/mm/yyyy}") %>' runat="server" width="150px" />
</EditItemTemplate>
</asp:TemplateField>

 Sub GridOrders_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        '///coloring the rows//////
        For Each row As GridViewRow In GridOrders.Rows  'Loop through the row of the gridview
            Dim strCurrentDate As String = CType(DateAndTime.Today().ToString, Date).Date 'Declare the current date
            'Get the date from the gridview row and convert to date type
            Dim lblDelDate As Date = CDate(CType(row.FindControl("lblDel"), Label).Text.ToString).Date
            'Dim txtDelDate As Date = CDate(CType(row.FindControl("txtDel"), TextBox).Text.ToString).Date

            If lblDelDate = strCurrentDate Then
                row.BackColor = Drawing.Color.Green
            Else
                row.BackColor = Drawing.Color.Orange
            End If
        Next
End Sub
pascalmartinAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Kamal KhaleefaInformation Security SpecialistCommented:
try to add event rowEditing and to but ur code there
0
pascalmartinAuthor Commented:
I got an error message of object not found
0
CtrlAltDlCommented:
You don't need to  loop trough each row since RowDataBound is called after each row.

Use e.Row.RowType to check if it is a data row and not a header or footer.  Use e.Row.RowState to see if the gridview is in edit mode.

 Sub GridOrders_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        '///coloring the rows//////
        //Check if it is a data row and not a header/footer and check if it is in the Edit mode
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState <> DataControlRowState.Edit Then
            Dim strCurrentDate As String = CType(DateAndTime.Today().ToString, Date).Date 'Declare the current date
            'Get the date from the gridview row and convert to date type
            Dim lblDelDate As Date = CDate(CType(row.FindControl("lblDel"), Label).Text.ToString).Date
            'Dim txtDelDate As Date = CDate(CType(row.FindControl("txtDel"), TextBox).Text.ToString).Date

            If lblDelDate = strCurrentDate Then
                row.BackColor = Drawing.Color.Green
            Else
                row.BackColor = Drawing.Color.Orange
            End If
        End If
End Sub 

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming Languages-Other

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.