Working with GridView in asp.net

I have a gridview control. Within this there are is a EditTemplate that contains a textbox called "txtDescribeDMG". When I click the Edit link to put the gridview into EditMode I would like to turn the textbox blue (if certain conditions are true) .

 I keep getting Object reference not set to an instance of an object”. error. I am assuming it is because the textbox does not exist at that point in time. My question is how would I achieve this then? Code is below. Any insight would be most appreciated.

  <asp:GridView ID="gvStolenUnits" runat="server" onrowediting="gvStolenUnits_RowEditing" AutoGenerateColumns="False" Width="800px"    OnRowCommand="gvStolenUnits_OnRowCommand" OnRowDataBound="gvStolenUnits_OnRowDataBound" DataSourceID="SqlDataSourcegvStolenUnits"  BackColor="#EEEEEE" DataKeyNames="SeqNo" BorderStyle="Solid" BorderWidth="1px"  BorderColor="#000000" AllowPaging="False"  SelectedRowStyle-BackColor="AliceBlue">
                                       <RowStyle  BorderStyle="Solid" BorderWidth="1px"   CssClass="UnitsRowStyle" BackColor="White" />
                                            <HeaderStyle CssClass="UnitsHeaderStyle" />
                                            <SelectedRowStyle BackColor="Cornsilk" BorderColor="#990000" BorderStyle="Solid" BorderWidth="2px"  CssClass="UnitsRowStyle" />
                                          
                                            <EmptyDataTemplate>
                                             
                                           </EmptyDataTemplate >
                                        
 <Columns>
<asp:CommandField    runat="server"     EditText="Edit"  CancelText="Cancel" ShowCancelButton="true" ShowDeleteButton="false"  ShowEditButton="true" >
                                                     
 <HeaderStyle  HorizontalAlign="Center"  CssClass="UnitsHeaderStyle"  />
 <ItemStyle  HorizontalAlign="Center" VerticalAlign="Top" wrap="false" width="54px" CssClass="UnitsRowStyle"   />
 </asp:CommandField>

 <asp:BoundField HeaderText="SeqNo"   DataField="SeqNo" ReadOnly="true" Visible="true"  SortExpression="SeqNo" ItemStyle-Width="10px"></asp:BoundField>

<asp:BoundField HeaderText="Unit"  DataField="Unit" ReadOnly="true" SortExpression="Unit" ItemStyle-Width="20px"></asp:BoundField>

<asp:BoundField HeaderText="Make"  DataField="Make" ReadOnly="true"  SortExpression="Make" ItemStyle-Width="20px"></asp:BoundField>
                                                   <asp:BoundField HeaderText="Model"  DataField="Model" ReadOnly="true"  SortExpression="Model" ItemStyle-Width="20px"></asp:BoundField>
                       
<asp:TemplateField HeaderText="Recovered?" ItemStyle-Width="20px">
 <ItemTemplate><%# Eval("Recovered")%></ItemTemplate>
  <EditItemTemplate>
    <asp:DropDownList ID="ddlIsUnitRecovered"  selectedvalue='<%# Bind("Recovered") %>' OnSelectedIndexChanged="ddlIsUnitRecovered_OnSelectedIndexChanged" runat="server" AutoPostBack="True" >
                                    <asp:ListItem Text="Please Select" Value="" Selected="True"></asp:ListItem>
                                                                <asp:ListItem Text="Yes" Value="Y"></asp:ListItem>
                                                                <asp:ListItem Text="No" Value="N"></asp:ListItem>
                                                        </asp:DropDownList>
                                                     
                                                        </EditItemTemplate>
                                                </asp:TemplateField>
                                               
                                                <asp:TemplateField HeaderText="Is Unit Damaged?" ItemStyle-Width="20px">
                                                       <ItemTemplate><%# Eval("IsUnitDamaged")%></ItemTemplate>
                                                       <EditItemTemplate>
                                                      
                                                            <asp:DropDownList ID="ddlInsertIsUnitDamagedTheft" selectedvalue='<%# Bind("IsUnitDamaged") %>' OnSelectedIndexChanged="ddlInsertIsUnitDamagedTheft_OnSelectedIndexChanged" runat="server" AutoPostBack="True"  runat="server">
                                                               <asp:ListItem Text="Please select" Value="" Selected="True"></asp:ListItem>
                                                               <asp:ListItem Text="Yes" Value="Y"></asp:ListItem>
                                                               <asp:ListItem Text="No" Value="N"></asp:ListItem>
                                                            </asp:DropDownList>
                                                       
                                                     
                                                        </EditItemTemplate>
                                                </asp:TemplateField>
                                               
                                             <asp:TemplateField HeaderText="Describe Damage">
                                                       <ItemTemplate><%# Eval("Damage")%></ItemTemplate>
                                                       <EditItemTemplate>
                                                      
                                                            <asp:TextBox ID="txtDescribeDMG" Text='<%# Bind("Damage") %>' runat="server" Width="100%"></asp:TextBox>
                                                       
                                                     
                                                        </EditItemTemplate>
                                                </asp:TemplateField>

                                              <asp:BoundField HeaderText="UnitID"  DataField="UnitID" ReadOnly="true"  SortExpression="UnitID" ItemStyle-Width="20px" Visible="true"></asp:BoundField>
                                              
                                            </Columns>       

                    </asp:GridView>  

Open in new window


      protected void gvStolenUnits_RowEditing(object sender, GridViewEditEventArgs e)
        {
            // Get the currently selected row using the SelectedRow property.

               int index = Convert.ToInt32(e.NewEditIndex);
               GridViewRow row = gvStolenUnits.Rows[index];
               ClaimInfo ci = new ClaimInfo();
               int unitid = Convert.ToInt32(row.Cells[8].Text);
               DataSet ds = ci.GetSelectedUnit(claimid, unitid);
               string rec = ds.Tables[0].Rows[0]["Recovered"].ToString();
               string isunitdmg = ds.Tables[0].Rows[0]["IsUnitDamaged"].ToString();

      ///THIS IS WHERE IT FAILS !!!!!!
          TextBox txtDDMG = (TextBox)row.FindControl("txtDescribeDMG"); 


               if (rec == "Y" && isunitdmg == "Y")
               {
                   txtDDMG.ForeColor = Color.Blue;
                   txtDDMG.ReadOnly = false;


               }



        }

Open in new window

jazzcatoneAsked:
Who is Participating?
 
Shaun KlineLead Software EngineerCommented:
You can use the RowCreated or RowDataBound events to perform this action. Compare the e.Row.RowIndex to the GridView.EditIndex so that your code only run your code if the bound/created row is the row being edited.
0
 
Aijaz ChauhanCommented:
Use Row Data bound event of grid view  

protected void gvStolenUnits_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
       if (e.Row.RowState == DataControlRowState.Edit)
       {
           TextBox txtDDMG = (TextBox)e.Row.FindControl("txtDDMG ");
           if( txtDDMG  != null)
           {
              txtDDMG.ForeColor = Color.Blue;
              txtDDMG.ReadOnly = false;
            }
       }
    }
}
0
 
jazzcatoneAuthor Commented:
thanks
0
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.

All Courses

From novice to tech pro — start learning today.