删除表中的行

时间:2017-10-18 05:35:37

标签: mysql asp.net vb.net

我的网页上有以下标记:

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

但是,点击生成的网页上的删除按钮后,我收到错误:

  

&#34;对象引用未设置为对象的实例。&#34;

Visual Studio将错误指向&#34; TryCast&#34;。 我找不到任何类似的例子,也不明白发生了什么,如果有人能更好地获得那个ID值也会有用吗?

1 个答案:

答案 0 :(得分:2)

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