【发布时间】:2016-05-29 02:18:40
【问题描述】:
我有一个 GridView,其中一列是一个复选框。在数据库中,这些复选框默认为 1。因此,如果用户取消选中该复选框,我将调用 Web 方法来更新数据库。
GridView 代码:
<asp:GridView style="width:75%"
ID="gvCVRTDetails"
ShowHeaderWhenEmpty="true"
CssClass="tblResults"
runat="server"
OnRowDataBound="gvCVRTDetails_RowDataBound"
DataKeyField="ID"
AutoGenerateColumns="false"
allowpaging="false"
AlternatingRowStyle-BackColor="#EEEEEE">
<HeaderStyle CssClass="tblResultsHeader" />
<Columns>
<asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField>
<asp:BoundField DataField="Description" HeaderText="Checklist Items"></asp:BoundField>
<asp:BoundField DataField="Checked" HeaderText="OK"></asp:BoundField>
</asp:GridView>
后面的代码:
protected void gvCVRTDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
lookupCVRT work = (lookupCVRT)e.Row.DataItem;
GridView gv = sender as GridView;
e.Row.Attributes.Add("ID", "gvCVRTDetails_" + work.ID);
e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();");
HtmlGenericControl lnkShowHide = (HtmlGenericControl)e.Row.FindControl("lnkShowHide");
HyperLink ChecklistItem = (HyperLink)e.Row.FindControl("ID");
bool bAll = work.Checked;
e.Row.Cells[4].Text = "<input type=\"checkbox\" " + ((bAll) ? "checked" : "") + "/>";
e.Row.Cells[4].Attributes.Add("onclick", "UpdateCheckedBox(" + work.ID.ToString() + ", this.Checked);");
}
}
Javascript 函数:
function UpdateCheckedBox(ID, Checked) {
alert(Checked);
PageMethods.UpdateCheckUserControl(ID, Checked, OnUpdateSuccess, OnUpdateFail);
}
但是调用 this.Checked 会返回 undefined 而不是 true 或 false。我也试过this.Value,但这也不起作用
【问题讨论】:
-
是
.checked和.value -
@Andreas 删除这个词?
-
没有。 JavaScript 也区分大小写,属性以小写字母开头 ->
this.checked和this.value -
@Andreas 我尝试使用检查和值,但它仍然返回未定义
-
onclick是在单元格上定义的,而不是在复选框上。因此this是单元格而不是复选框。在复选框上定义click处理程序或将this.checked更改为从单元格中查找/获取输入的内容(取决于cell是this.children[0].checked或this.getElementsByTagName("input")[0].checked可以工作)
标签: javascript jquery asp.net gridview checkbox