2010-06-29 72 views
0

我有一個顯示問題列表的gridview。只有一個字段是可編輯的,並且如果信息已被編輯,則電子郵件被髮送到特定的「命運」。所有工作正常,但是當我嘗試在我的SendEmail函數中使用Findcontrol時,我得到 「對象引用未設置爲對象的實例」。我如何獲得問題ID?在gridview行更新後獲取值

我的SqlDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:conn %>" SelectCommand="SELECT Questions.QuestionID, Questions.Name, Questions.Question, Questions.Destiny, Questions.DateQuestion, Questions.Answer" UpdateCommand="UPDATE Questions SET Destiny = @Destiny WHERE (QuestionID = @QuestionID)"> 
    <SelectParameters> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Destiny" /> 
     <asp:Parameter Name="QuestionID" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

我的GridView:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="QuestionID" OnRowUpdated="GridView1_RowUpdated" 
    DataSourceID="SqlDataSource1"> 
    <Columns> 

     <asp:TemplateField HeaderText="ID" InsertVisible="False" SortExpression="QuestionID"> 
      <ItemTemplate> 
       <asp:Label ID="LabelQuestionID" runat="server" Text='<%# Bind("QuestionID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField>  

    <asp:TemplateField HeaderText="Question" InsertVisible="False" SortExpression="Question"> 
      <ItemTemplate> 
       <asp:Label ID="LabelQuestion" runat="server" Text='<%# Bind("Question") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

    <asp:TemplateField HeaderText="Date" SortExpression="DateQuestion"> 
         <ItemTemplate> 
       <asp:Label ID="LabelDateQuestion" runat="server" Text='<%# Bind("DateQuestion", "{0:g}") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 



     <asp:TemplateField HeaderText="Destiny" SortExpression="Destiny"> 
          <ItemTemplate> 
       <asp:Label ID="LabelDestiny" runat="server" Text='<%# Bind("Destiny") %>'></asp:Label> 

      </ItemTemplate> 

      <EditItemTemplate> 
      <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Destiny") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 



     <asp:TemplateField ShowHeader="False"> 
      <EditItemTemplate> 
       <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="True" CommandName="Update" 
        Text="Update"></asp:LinkButton> 
       <asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Cancel" 
        Text="Cancel"></asp:LinkButton> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 




     </Columns> 
</asp:GridView> 

我身後代碼:

Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) 

    If Trim(e.OldValues("Destiny").ToString <> Trim(e.NewValues("Destiny").ToString)) Then 
    QuestionID = GridView1.FindControl("LabelQuestionID").ToString 
    SendEmailtoAdviser(Trim(e.NewValues("Destiny")), QuestionID) 
    End If 
    End Sub 

回答

0

如果通過使用下面的代碼完成更新,我可以獲取gridview中特定單元格的值。在我的情況下,我想要檢索我的gridview中第一列的ID。

Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) 
    If Trim(e.OldValues("Destiny").ToString <> Trim(e.NewValues("Destiny").ToString)) Then 
     Dim index As Integer = GridView1.EditIndex 
     Dim row As GridViewRow = GridView1.Rows(index) 
     SendEmailtoAdviser(Trim(e.NewValues("Destiny").ToString), row.Cells(0).Text) 
    End If 
End Sub 
0

你的第一步應該是打破代碼來分隔行找到out哪個語句返回空引用:

QuestionControl = GridView1.FindControl("LabelQuestionID") 
QuestionID = QuestionControl.ToString 

Recipient = e.NewValues("Destiny") 
SendEmailtoAdviser(Trim(Recipient), QuestionID) 

這將告訴您問題控件是否未找到或收件人是否不在事件參數中。

從那裏你可以找出什麼是沒有正確設置。

+0

嗨,謝謝你的幫助。我不確定我的答案需要做什麼。 – netNewbi3 2010-06-29 10:51:44

+0

@ netNewbi3 - 一旦你分離了你的代碼,你可以通過調試器來找出哪一行實際上引發了空引用異常。例如,它*可能是'FindControl'返回'null'。有了這些信息,你就可以明白爲什麼會出現這種情況。是標籤名稱不正確,還是您在標籤的錯誤容器中查找? – ChrisF 2010-06-29 11:04:35

+0

ChrisF,謝謝。標籤名稱是正確的。我如何檢查我是否在標籤的錯誤容器中查找? – netNewbi3 2010-06-29 11:19:11