asp.net - 将 ID 值传递给后面代码中的 OnCheckedChange 事件

标签 asp.net vb.net gridview

我有一个 gridview,每一行数据都有一个复选框。

当选中或取消选中该复选框时,我需要更新数据库中的位标志。

我正在尝试使用 OnCheckedChanged 事件。

它确实会触发,但是我收到了一个与 ID 有关的空错误。

我的问题是,我不太确定如何获取 OnCheckedChanged 事件代码所需的 ID。

我需要此 ID 来更新数据库中的相应行。

我在 StackOverflow 上发现了一些相关问题,但所提供的答案都没有真正帮助我解决问题。

谢谢!

我的gridview代码:

<asp:GridView ID="gvlisting" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="Item Is Ready">
        <ItemTemplate>
            <asp:CheckBox ID="isReady" runat="server" AutoPostBack="true" OnCheckedChanged="isReady_CheckedChanged" Checked='<%#isReady(CInt(Eval("isReady")))%>'/>
        </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Item Name">
            <ItemTemplate>
                <asp:Label ID="itemName" runat="server" Text='<%#cleanString(Eval("itemName").ToString())%>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

后台代码:

Public Sub isReady_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim box As CheckBox = DirectCast(sender, CheckBox)
    If box.Checked = True Then
        'custom code for executing an SQL UPDATE statement
        db.ExecuteNonQuery(AddIsreadyFlag, New SqlParameter("@itemID", Me.ID))
    Else
        db.ExecuteNonQuery(RemoveIsreadyFlag, New SqlParameter("@itemID", Me.ID))
    End If

End Sub

最佳答案

Me.IDPageID,因为 Me 是当前页面实例。

您可以使用 ID 添加另一个模板字段:

<asp:TemplateField HeaderText="Item-ID" Visible="false">
    <ItemTemplate>
        <asp:Label ID="itemID" runat="server" Text='<%# Eval("itemID") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

现在您可以使用 NamingContainer 获取行并使用 FindControl 获取标签:

Public Sub isReady_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim box As CheckBox = DirectCast(sender, CheckBox)
    Dim row = DirectCast(box.NamingContainer, GridViewRow)
    Dim itemID = DirectCast(row.FindControl("itemID"), Label).Text
    If box.Checked = True Then
        'custom code for executing an SQL UPDATE statement
        db.ExecuteNonQuery(AddIsreadyFlag, New SqlParameter("@itemID", itemID))
    Else
        db.ExecuteNonQuery(RemoveIsreadyFlag, New SqlParameter("@itemID", itemID))
    End If

End Sub

关于asp.net - 将 ID 值传递给后面代码中的 OnCheckedChange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364640/

相关文章:

c# - Web服务是否可以替代Application.DoEvents()

javascript - 如何将 JSON 字符串化的 javaScript 对象发送到服务器

c# - 如何在我的 VB.net 应用程序中处理来自 c# Web 服务的区分大小写的类和方法

java - 当我长按 GridView 中的项目时,如何在 Android 应用程序上显示对话框?

c# - 从 RadTimePicker c# 获取输入的时间

asp.net - 检索此数据的最佳方法是什么?

asp.net - AJAX 请求时 Azure SQL 中的间歇性连接超时

c# - 编译器无法识别数据集(我使用向导或 .xsd 文件添加)

java - Android Gridview - 将子布局方向更改为向下然后横向?

android - 在 hashmap 中搜索字符串并删除