ASPx GridView行单元格计数器并没有给我正确的单元格

时间:2018-02-20 09:32:31

标签: c# asp.net aspxgridview

修改

e.Row.Cells.Count上的细胞计数表示6个细胞而不是我定义的3个细胞。再次,wtf?

原始问题

我之前已多次这样做但现在我得到了奇怪的错误......

所以我要做的就是设置一个javascript确认框出现并提示用户确认删除记录。我通过将Delete CommandField控件强制转换为LinkBut​​ton并修改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。

令人沮丧的是,它在上面写的另一个项目中工作,所以我真的没有得到这些错误来自的第一个线索。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请注意,GridView上未指定AutoGenerateColumns

这里的问题是,如果你没有为其指定值,GridView会将此属性默认为true。

这导致列数增加一倍,所以无论我尝试过哪种方式,我总是瞄准错误的列。

解决方案是将AutoGenerateColumns显式设置为false。