如何在GridView CheckBox的onclick方法中调用DisplayDetails并获取行索引?
解决GridView中点击CheckBox获取行索引并调用DisplayDetails的问题
这里有两种简单的方法可以帮你实现需求,不用大改现有代码:
方法1:后台绑定行索引到CheckBox的自定义属性
这种方式最直接,在后台OnRowDataBound方法里,给每个CheckBox添加一个存储行索引的自定义属性,前端点击时直接读取即可:
修改后台代码
protected void OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // 保留你原来的代码 e.Row.Cells[3].Attributes.Add("onclick", string.Format("DisplayDetails('{0}');", e.Row.RowIndex + 1)); e.Row.Attributes["onmouseover"] = "onMouseOver('" + (e.Row.RowIndex + 1) + "')"; e.Row.Attributes["onmouseout"] = "onMouseOut('" + (e.Row.RowIndex + 1) + "')"; // 新增:找到CheckBox并添加行索引属性 CheckBox rowSelector = (CheckBox)e.Row.FindControl("RowSelector"); // 这里用e.Row.RowIndex +1,和你原来DisplayDetails里的行索引逻辑保持一致 rowSelector.Attributes.Add("data-rowindex", (e.Row.RowIndex + 1).ToString()); } }
修改前端checkRadioBtn函数
function checkRadioBtn(checkbox) { // 保留你原来的其他功能代码 // 获取行索引并调用DisplayDetails const rowIndex = checkbox.getAttribute('data-rowindex'); DisplayDetails(rowIndex); }
方法2:纯前端DOM遍历获取行索引
如果不想修改后台代码,可以通过前端DOM遍历找到CheckBox所在的行,直接获取行索引:
修改前端checkRadioBtn函数
function checkRadioBtn(checkbox) { // 保留你原来的其他功能代码 // 向上遍历找到当前行<tr>元素 const row = checkbox.closest('tr'); // row.rowIndex就是当前行在GridView中的索引(和你原来DisplayDetails用的索引一致) DisplayDetails(row.rowIndex); }
小提示
看你DisplayDetails里的代码,把A文本框赋值为cells[1].innerText,B文本框赋值为cells[0].innerText,这和GridView列的顺序(A是第0列,B是第1列)刚好反过来,如果是笔误的话可以调整一下,不过如果是业务需求就保持原样就行。
内容的提问来源于stack exchange,提问作者Laba Ningombam
相关产品推荐
相关产品推荐

