2015-04-23 3 views
-1

В моей ASP GridView, у меня есть следующие (обновлено, чтобы показать полный GridView):FindControl метания NullReferenceException

<asp:GridView ID="TPAnnuity_GridView" AllowSorting="true" AllowPaging="true" Runat="server" 
    DataSourceID="TPAnnuity_SqlDataSource" DataKeyNames="AnnuityTotalPointsID" 
    AutoGenerateColumns="False" ShowFooter="true" PageSize="20"> 
<Columns> 
    <asp:TemplateField HeaderText="Company" SortExpression="CompanyName" HeaderStyle-VerticalAlign="Bottom"> 
     <ItemTemplate> 
      <asp:Label ID="Label11" runat="server" Text='<%# Bind("CompanyName") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:DropDownList ID="EditACompanyID" runat="server" DataSource="<%# ddlCompanyDS %>" DataValueField="CompanyID" DataTextField="CompanyName" selectedValue='<%# Bind("CompanyID") %>'></asp:DropDownList> 
     </EditItemTemplate> 
     <FooterTemplate> 
      <asp:DropDownList ID="NewCompanyID" runat="server" DataSource="<%# ddlCompanyDS %>" DataValueField="CompanyID" DataTextField="CompanyName"></asp:DropDownList> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator11" runat="server" ControlToValidate="NewCompanyID" Display="Dynamic" ForeColor="" ErrorMessage="You must enter a value. *" Enabled="false"></asp:RequiredFieldValidator> 
     </FooterTemplate> 
     <FooterStyle Wrap="False" /> 
    </asp:TemplateField>  
</Columns> 
<EmptyDataTemplate> 
    <br /> 
    <i>No Commission Data to display.</i> 
    <br /> 
    <br /> 
</EmptyDataTemplate> 
</asp:GridView> 

И в моем заднем конце, у меня есть следующие:

Sub TPAnnuity_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles TPAnnuity_GridView.RowCommand 
    If e.CommandName = "Cancel" Then 
     'Reset Footer Row input fields 
     CType(TPAnnuity_GridView.FooterRow.FindControl("NewCompanyID"), DropDownList).SelectedIndex = 0 

    ElseIf e.CommandName = "Insert" Then 
     TPAnnuity_SqlDataSource.InsertParameters.Clear() 
     Dim test1 As New Parameter("CompanyIDInt", TypeCode.Int32) 
     test1.DefaultValue = CType(TPAnnuity_GridView.FooterRow.FindControl("NewCompanyID"), DropDownList).SelectedValue 
     TPAnnuity_SqlDataSource.InsertParameters.Add(test1) 
     TPAnnuity_SqlDataSource.Insert() 

    ElseIf e.CommandName = "Update" Then 
     TPAnnuity_SqlDataSource.UpdateParameters.Clear() 
     Dim param1 As New Parameter("CompanyIDInt", TypeCode.Int32) 
     param1.DefaultValue = CType(TPAnnuity_GridView.FooterRow.FindControl("EditACompanyID"), DropDownList).SelectedValue ****THIS IS THE PROBLEM LINE**** 
     TPAnnuity_SqlDataSource.UpdateParameters.Add(param1)   
     TPAnnuity_SqlDataSource.Update() 
    End If 
End Sub 

The Cancel и Insert функции работают нормально, выключая нижний колонтитул. Каждый раз, когда вы нажимаете кнопку «Обновить», я получаю исключение NullReferenceException на линии param1.Default Value =.

Может ли кто-нибудь помочь мне разобраться, что здесь происходит?

+0

потому что вы используете TPAnnuity_GridView.FooterRow. найти контроль при обновлении .... вот почему вы получаете проблему. Во время обновления вам нужно использовать GridView Edit Rows, а не нижний колонтитул – HaveNoDisplayName

+0

@Piyush Любой подскажет, каким будет мой синтаксис? 'CType (TPAnnuity_GridView.Rows.FindControl (" EditACompanyID "), DropDownList). Выбранный Value' вызывает больше ошибок. – PhoenixUNI

+0

Можете ли вы показать мне .aspx код для gridview. Я думаю, вам нужно получить строку, используя этот индекс Dim как Integer = Convert.ToInt32 (e.CommandArgument) Dim gvRow As GridViewRow = GridView1.Rows (index), а затем получить значение для «EditACompanyID» – HaveNoDisplayName

ответ

1

Ваша строка должна выглядеть следующим образом:

param1.DefaultValue = CType(e.CommandSource.FindControl("EditACompanyID"), DropDownList).SelectedValue 

Вместо использования FooterRow, вы должны использовать исходный ряд. Поскольку вы передали это с помощью e, вы можете использовать это.

+0

AHHHHH славный. Огромное спасибо. – PhoenixUNI

Смежные вопросы