2017-09-20 7 views
0

同じ行のほかの値に基づいてGridView内のテキストボックスを無効にしようとしていますが、enableプロパティを設定しようとするとnull参照例外が発生します。例外を与えるグリッドビュー内のテキストボックスの値にアクセスしよう

以下は私のASPXコードです:

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

そして、これは私のaspx.csコードです:

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; 
     } 
    } 
} 

私はこのコードで間違ってやっているところ、私はわかりません。

私はこの質問に対して助けてください、非常に感謝しますか?

答えて

2

あなたのTextBoxがEditTemplateであるので、これを試してみてください。

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