我的网页上有以下标记:

<asp:GridView ID="GridView" runat="server"
      AutoGenerateDeleteButton="True"
<Columns>
     <asp:TemplateField HeaderText="ID" Visible="false">
           <ItemTemplate>
              <asp:Label ID="lblID" runat="server" Text='<% #Eval("ID")%>'></asp:Label>
           </ItemTemplate>
     </asp:TemplateField>
...


我正在尝试获取文本字段的值,以获取要删除的行的正确ID,但是我不知道该怎么做,我尝试了以下代码:

Protected Sub GridView_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView.RowDeleting
    Dim row As GridViewRow = GridView.Rows(e.RowIndex)
    Dim ID As Integer = TryCast(row.FindControl("lblID"), TextBox).Text
...


但是,单击生成的网页上的删除按钮后,我只会得到错误:


  “你调用的对象是空的。”


Visual Studio将错误指向“ TryCast”。
我找不到任何类似的示例,也无法理解正在发生的事情,如果有人有更好的想法来获取同样有效的ID值呢?

最佳答案

您的lblID控件肯定是此控件标记定义的标签:

<asp:Label ID="lblID" runat="server" Text='<% #Eval("ID")%>'></asp:Label>


在此行中,您尝试将标签控件强制转换为TextBox而不是Label,因此它在访问Nothing属性时返回NullReferenceException并抛出Text

Dim ID As Integer = TryCast(row.FindControl("lblID"), TextBox).Text


您需要将什么转换为Label并在那里获得Text属性:

Dim ID As Integer = Convert.ToInt32(TryCast(row.FindControl("lblID"), Label).Text)


请注意,添加了Convert.ToInt32是因为标签控件的Text属性包含字符串值,因此必须强制转换为Integer。如果您不确定它将返回Nothing,请改用Integer.TryParse

关于mysql - 删除表中的一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46803427/

10-17 00:58