2017-09-20 1 views
0

J'essaie de désactiver la zone de texte à l'intérieur de GridView en fonction d'autres valeurs dans la même ligne mais comment j'obtiens une exception de référence nulle lorsque j'essaie de définir la propriété enable.essayer d'accéder à la valeur de la zone de texte donnant l'exception

Ci-dessous mon ASPX code:

<asp:GridView ID="gvPRCertInfo" runat="server" AutoGenerateColumns="False" GridLines="None" 
        CellSpacing="1" CellPadding="1" 
        Width="100%" BorderWidth="0" 
        AllowSorting="True" 
        PageSize="30" 
        OnRowDataBound="gvPRCertInfo_RowDataBound"       
        CssClass="data responsive"> 
        <Columns> 
         <asp:TemplateField HeaderText="Select" SortExpression=""> 
          <ItemTemplate> 
           <asp:CheckBox ID="chkCert" runat="server" /><input type="hidden" id="hdnCertId" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "CertId") %>' /> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:BoundField DataField="CertificateID" HeaderText="Certificate ID" /> 
         <asp:TemplateField HeaderText="OrderQuantity"> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtOrderQty" runat="server" 
            Text='<%# Bind("OrderQty") %>'></asp:TextBox> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="AvailableQuantity"> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtAvaiableQty" runat="server" 
            Text='<%# Bind("AvailableQty") %>'></asp:TextBox> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="RedeemQuantity"> 
          <EditItemTemplate> 
           <asp:TextBox ID="txtRedeemQty" runat="server"></asp:TextBox> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:BoundField DataField="Specification" HeaderText="specification" Visible ="false" /> 
         <asp:BoundField DataField="ActCertId" HeaderText="ActivatedCerts" Visible ="false" /> 
        </Columns> 
        <EmptyDataRowStyle CssClass="AlternatingRowStyle" /> 
        <HeaderStyle CssClass="HeaderStyle" HorizontalAlign="Center" /> 
        <PagerSettings Visible="False" /> 
</asp:GridView> 

Et voici mon aspx.cs code:

protected void gvPRCertInfo_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string specifications = Convert.ToString(e.Row.Cells[5].Text); 
     if(string.IsNullOrEmpty(specifications)) 
     { 

      TextBox txtOrderQty = e.Row.FindControl("txtOrderQty") as TextBox; 
      TextBox txtAvailableQty = e.Row.FindControl("txtAvaiableQty") as TextBox; 
      TextBox txtRedeemQty = e.Row.FindControl("txtRedeemQty") as TextBox; 
      txtOrderQty.Enabled = false; // getting error at here 
      txtAvailableQty.Enabled = false; 
      txtRedeemQty.Enabled = false; 
     } 

     string ActCertId = Convert.ToString(e.Row.Cells[6].Text); 
     if(string.IsNullOrEmpty(ActCertId)) 
     { 
      CheckBox chkCert = (CheckBox)e.Row.FindControl("chkCert"); 
      chkCert.Enabled = false; 
     } 
    } 
} 

Je ne sais pas où je suis en train de faire mal à ce code.

Pourriez-vous s'il vous plaît aider sur cette requête qui serait très reconnaissant pour moi?

Répondre

2

Votre TextBox est en EditTemplate alors essayez ceci:

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    if(e.Row.RowState == DataControlRowState.Edit) 
    { 
     // Here logic to apply only on rows in edit mode 
    } 
}