e.Row.Cells.Count
上的细胞计数表示6个细胞而不是我定义的3个细胞。再次,wtf?
我之前已多次这样做但现在我得到了奇怪的错误......
所以我要做的就是设置一个javascript确认框出现并提示用户确认删除记录。我通过将Delete CommandField控件强制转换为LinkButton并修改OnClientClick
值来执行此操作:
<asp:GridView runat="server" ID="gvItems"
DataKeyNames="Id"
PageSize="20"
OnRowDataBound="gvItems_RowDataBound"
OnRowDeleting="gvItems_RowDeleting"
OnSorting="gvItems_Sorting"
OnPageIndexChanging="gvItems_PageIndexChanging"
OnSelectedIndexChanging="gvItems_SelectedIndexChanging">
<Columns>
<asp:BoundField DataField="Description" HeaderText="Feature Description" SortExpression="Description" />
<asp:CommandField ShowSelectButton="true" SelectText="<i class='glyphicon glyphicon-pencil'></i>" />
<asp:CommandField ShowDeleteButton="true" DeleteText="<i class='glyphicon glyphicon-trash'></i>" />
</Columns>
</asp:GridView>
这是C#代码:
protected void gvItems_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.DataRow) return;
var btn = e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as LinkButton;
btn.OnClientClick = "return confirm('Are you sure you want to delete this feature?');";
}
使用e.Row.Cells.Count - 1
定位单元格,它返回的控件是一个复选框(???????)
如果我将其更改为使用e.Row.Cells.Count
,那么现在我收到了ArgumentOutOfRangeException。
令人沮丧的是,它在上面写的另一个项目中工作,所以我真的没有得到这些错误来自的第一个线索。
有什么想法吗?
答案 0 :(得分:0)
请注意,GridView上未指定AutoGenerateColumns
。
这里的问题是,如果你没有为其指定值,GridView会将此属性默认为true。
这导致列数增加一倍,所以无论我尝试过哪种方式,我总是瞄准错误的列。
解决方案是将AutoGenerateColumns显式设置为false。