在GridView中,OnCheckedChanged事件根本不触发

5

我有一个GridView,其中包含一个asp复选框在TemplateField中。TemplateField的定义如下:

<asp:TemplateField HeaderText="HeaderName">
    <ItemTemplate>
        <asp:CheckBox ID="checkBoxId" runat="server" OnCheckedChanged="MyCheckChangedMethod" AutoPostBack="true"/>
    </ItemTemplate>
</asp:TemplateField>

当我在MyCheckChangedMethod方法中设置断点,然后点击复选框时,没有任何反应,断点没有被触发。我的Visual Studio调试器正在运行。
此外,在我的页面定义中,我设置了AutoEventWireup = True,因此不需要手动连接事件。以前我这样做从未出现过问题。在同一页上设置了一个按钮,与点击事件相同的方式进行设置,该断点可以正常触发。您有什么想法吗?
4个回答

6

您需要在 asp:CheckBox 标签中添加 AutoPostback = True


6
问题发生在控件事件触发之前调用了 DataBind。如果你在 Page_Load 中调用 DataBind,请将其放在 if (!isPostBack) {} 中,并在事件处理程序本身中调用 DataBind。

5
复选框控件的回发事件无法正确触发,因为它在GridView中,而GridView会破坏控件的ID。
如果您需要复选框反映数据,可以使用CheckBoxField对象并进行绑定。
如果您需要对行执行操作,则可以考虑使用ButtonField对象,并使用CommandName属性和RowCommand事件。
有方法在服务器端访问GridView中的复选框

0

尝试:

<asp:CheckBox  ID="checkBoxId" runat="server" AutoPostBack=true OnCheckedChanged="MyCheckChangedMethod"/>

请确保aspx页面顶部有CodeFile="YOUR_FILE.aspx.cs"。

同时,请确保您的函数MyCheckChangedMethod定义为

函数应该有object sender,EventArgs e。

public void MyCheckChangedMethod(object sender, EventArgs e)
{
  bool b = false;//your data here
}

还要确保 web.config 文件中的 debug 属性已设置为 true(可能已经完成)。

代码文件在文件头中。就像我在底部所说的那样,我的按钮单击事件很好用,只是GridView内的CheckBox给了我问题。而且,你建议的代码与我上面定义复选框的方式完全相同。该方法使用正确的方法签名定义为对象和EventArgs。这就是问题如此令人沮丧的原因。我知道如何通过ASP.net标记设置事件。 - Adam
只是一个建议。我自己尝试了这段代码(不包括网格视图),它可以工作。这个函数包含一些代码还是空的? - Ganesh R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接