我在TemplateField中有一个带有asp CheckBox的GridView。 TemplateField定义如下:
<asp:TemplateField HeaderText="HeaderName">
<ItemTemplate>
<asp:CheckBox ID="checkBoxId" runat="server" OnCheckedChanged="MyCheckChangedMethod" AutoPostBack="true"/>
</ItemTemplate>
</asp:TemplateField>
当我在MyCheckChangedMethod中使用断点运行我的Web项目并单击该复选框时,没有任何反应。断点没有被击中。我的Visual Studio调试器正在运行。
此外,我的页面定义中有AutoEventWireup = True,因此我不必手动挂接事件。我以前从来没有遇到过这样做的问题。我在同一页面上有一个按钮设置与点击事件完全相同的方式,断点得到了很好的打击。
有什么想法吗?
答案 0 :(得分:6)
您需要在AutoPostback = True
代码中添加asp:CheckBox
。
答案 1 :(得分:5)
复选框控件的回发事件将无法正确触发,因为它在GridView中会破坏控件的ID。
如果您需要Checkbox来反映数据,您可以使用CheckBoxField对象并以此方式绑定。
如果您需要对该行执行操作,您可能需要使用 CommandName 属性和 RowCommand 事件查看ButtonField对象。
答案 2 :(得分:5)
在触发控件事件之前调用DataBind
时会出现问题。
如果您在DataBind
中致电Page_Load
,请将其填入
if (!isPostBack) {}
并在事件处理程序本身中调用DataBind
。
答案 3 :(得分:0)
尝试:
<asp:CheckBox ID="checkBoxId" runat="server" AutoPostBack=true OnCheckedChanged="MyCheckChangedMethod"/>
确保aspx页面顶部有CodeFile =“YOUR_FILE.aspx.cs”。
另请注意,您的函数MyCheckChangedMethod定义为
函数应该有对象发送者,EventArgs e。
public void MyCheckChangedMethod(object sender, EventArgs e)
{
bool b = false;//your data here
}
还要确保web.config的调试设置为true(想想已经完成)。