C# 隐藏编辑&;gridview中最后一行的删除按钮

C# 隐藏编辑&;gridview中最后一行的删除按钮,c#,asp.net,.net,gridview,datarow,C#,Asp.net,.net,Gridview,Datarow,我有一个gridview,gridview中的几个列都有数量计算。我在gridview的最后添加了一个新的datarow,它汇总列值并显示 但gridview中的最后一行显示了“编辑和删除”按钮,我怎么可能从最后一行隐藏这两个图像 <asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server" AutoGenerateColumns="false" CssClass="Gridview"

我有一个gridview,gridview中的几个列都有数量计算。我在gridview的最后添加了一个新的datarow,它汇总列值并显示

但gridview中的最后一行显示了“编辑和删除”按钮,我怎么可能从最后一行隐藏这两个图像

<asp:GridView ID="gvDetails" DataKeyNames="UserId,UserName" runat="server"
        AutoGenerateColumns="false" CssClass="Gridview" HeaderStyle-BackColor="#61A6F8"
        ShowFooter="true" HeaderStyle-Font-Bold="true" HeaderStyle-ForeColor="White"
        onrowcancelingedit="gvDetails_RowCancelingEdit"
        onrowdeleting="gvDetails_RowDeleting" onrowediting="gvDetails_RowEditing"
        onrowupdating="gvDetails_RowUpdating">
    <Columns>

        <asp:TemplateField>
            <EditItemTemplate>
                <asp:ImageButton ID="imgbtnUpdate" CommandName="Update" runat="server" ImageUrl="~/Images/update.jpg" ToolTip="Update" Height="20px" Width="20px" />
                <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="~/Images/Cancel.jpg" ToolTip="Cancel" Height="20px" Width="20px" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:ImageButton ID="imgbtnEdit" CommandName="Edit" runat="server" ImageUrl="~/Images/Edit.jpg" ToolTip="Edit" Height="20px" Width="20px" />
                <asp:ImageButton ID="imgbtnDelete" CommandName="Delete" Text="Edit" runat="server" ImageUrl="~/Images/delete.jpg" ToolTip="Delete" Height="20px" Width="20px" />
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="ID">
            <EditItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%#Eval("ID") %>'/>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%#Eval("ID") %>'/>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Profit">
            <EditItemTemplate>
                <asp:TextBox ID="txtProfit" runat="server" Text='<%#Eval("Profit") %>'/>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblProfit" runat="server" Text='<%#Eval("Profit") %>'/>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Amount">
            <EditItemTemplate>
                <asp:TextBox ID="txtAmount" runat="server" Text='<%#Eval("Amount") %>'/>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblAmount" runat="server" Text='<%#Eval("Amount") %>'/>
            </ItemTemplate>
        </asp:TemplateField>

    </Columns> 
</asp:GridView>

您可以通过编程方式隐藏它们:

var lastRow = gvDetails.Rows[gvDetails.Rows.Count - 1];
lastRow.FindControl("imgbtnEdit").Visible = false;
lastRow.FindControl("imgbtnDelete").Visible = false;
理想情况下,这应该在网格视图绑定数据并具有所有行(包括最后一行)后完成,但作为最后一种手段,您可以使用
Page\u PreRender

尝试此操作

将“编辑和删除”按钮列的可见性设置为false。您可以相应地设置列索引

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
        e.Row.Cells[0].Visible = false;   //0 is autogenerate edit column index
        e.Row.Cells[1].Visible = false;  // 1  is autogenerate delete column index
}
}

求和数据的最佳位置是页脚,这将考虑命令控件,因为它们不会添加到页脚

见:

此外:

示例(应易于转换为C#):

“注意全局声明”
尺寸总计1为双精度=0
Dim Total2为双精度=0
受保护的子网格视图1_行数据绑定_
(发件人作为对象,e作为GridViewRowEventArgs)处理GridView1.RowDataBound
如果e.Row.RowType=DataControlRowType.DataRow,则
Dim drv as DataRowView=CType(e.Row.DataItem,DataRowView)
'对数据行执行求和
Total1+=CDbl(drv(“”.ToString())
Total2+=CDbl(drv(“”.ToString())
ElseIf e.Row.RowType=DataControlRowType.Footer然后
'将结果放置在页脚单元格中
e、 Row.Cells(2.Text=“Total:&Total1.ToString()
e、 Row.Cells(3.Text=“Total:&Total2.ToString()
恩迪夫
端接头

你能发布网格视图的标记吗?@Andrei-我已经更新了我的帖子。当我对每个页面使用页面索引时,该行没有“编辑和删除”按钮。我该怎么解决呢?@Vicky,这取决于你最后一个求和行出现的位置。是在最后一页上,还是在每一页上?每一页都会发生。@Vicky,对,我理解。问题是,您可能仍然希望隐藏这些按钮以用于最终求和行。目前,我们对当前显示的网格的最后一行执行此操作,这并不总是总和行。因此,为了正确地解决这个问题,我们需要了解如何区分每页的最后一行和正确的求和行。求和行将是gridview中的最后一行。
'Note Global Declaration
Dim Total1 As Double = 0
Dim Total2 As Double = 0

Protected Sub GridView1_RowDataBound _
    (sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound    

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim drv as DataRowView = CType(e.Row.DataItem, DataRowView)

        ' Perform summations on Data rows
        Total1 += CDbl(drv("<column_name>").ToString())
        Total2 += CDbl(drv("<other_column_name>").ToString())

    ElseIf e.Row.RowType = DataControlRowType.Footer Then

        ' Place results in footer cells
        e.Row.Cells(2).Text = "Total: " & Total1.ToString()
        e.Row.Cells(3).Text = "Total: " & Total2.ToString()
    Endif
End Sub