我有一個顯示問題列表的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
嗨,謝謝你的幫助。我不確定我的答案需要做什麼。 – netNewbi3 2010-06-29 10:51:44
@ netNewbi3 - 一旦你分離了你的代碼,你可以通過調試器來找出哪一行實際上引發了空引用異常。例如,它*可能是'FindControl'返回'null'。有了這些信息,你就可以明白爲什麼會出現這種情況。是標籤名稱不正確,還是您在標籤的錯誤容器中查找? – ChrisF 2010-06-29 11:04:35
ChrisF,謝謝。標籤名稱是正確的。我如何檢查我是否在標籤的錯誤容器中查找? – netNewbi3 2010-06-29 11:19:11