将ID值传递给后面的代码中的OnCheckedChange事件

时间:2014-08-18 13:32:37

标签: 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

3 个答案:

答案 0 :(得分:2)

Me.IDID的{​​{1}},因为Page是当前页面实例。

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

Me

现在,您可以使用<asp:TemplateField HeaderText="Item-ID" Visible="false"> <ItemTemplate> <asp:Label ID="itemID" runat="server" Text='<%# Eval("itemID") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> 获取行,NamingContainer获取标签:

FindControl

答案 1 :(得分:1)

将ID列添加到网格中,然后根据需要将其visible属性设置为false。

您可以获取Gridview的选定行,然后获取ID列的值(该列不需要是可见的,但它需要存在于网格中)。

 var someVar  = gvlisting.SelectedRow.Cells[0].Text; //change 0 to correct column

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.selectedrow(v=vs.110).aspx

您可能需要在SelectedIndexChanged中执行此操作,但我怀疑,如果是这种情况,您可以使用上述内容轻松地从单元格获取数据,或者像... How to find control in TemplateField of GridView?

答案 2 :(得分:1)

您还可以尝试在OnDataBinding事件中添加自定义属性,并在de CheckChanged事件中检索该值。

    protected void chkEnabled_DataBinding(object sender, EventArgs e)
    {
        CheckBox chk = (CheckBox)sender;
        string id = Eval("Id").ToString();
        chk.Attributes.Add("data-id", id);
    }

    protected void chkEnabled_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = (CheckBox)sender;
        string id = chk.Attributes["data-id"];
    } 
相关问题