Скрыть кнопку редактирования и удаления для последней строки в представлении сетки

У меня есть gridview, и несколько столбцов в gridview имеют расчет суммы. И я добавил новую строку данных в последнюю часть сетки, которая суммирует значения столбцов и отображает их.

Но в последней строке в 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>

person Community    schedule 01.04.2014    source источник
comment
Можете ли вы опубликовать разметку сетки?   -  person Andrei    schedule 01.04.2014
comment
@ Андрей - я обновил свой пост.   -  person    schedule 01.04.2014


Ответы (3)


Вы можете скрыть их программно:

var lastRow = gvDetails.Rows[gvDetails.Rows.Count - 1];
lastRow.FindControl("imgbtnEdit").Visible = false;
lastRow.FindControl("imgbtnDelete").Visible = false;

В идеале это должно быть сделано после того, как представление сетки привязано к данным и имеет все строки (включая последнюю), но в крайнем случае вы можете использовать Page_PreRender.

person Andrei    schedule 01.04.2014
comment
Когда я использую индексирование страниц для каждой страницы, в строке нет кнопки редактирования и удаления. Как я могу это исправить? - person ; 02.04.2014
comment
@ Вики, это зависит от того, где появляется ваша последняя строка суммирования. Это на последней странице или на каждой странице? - person Andrei; 02.04.2014
comment
Это происходит для каждой страницы. - person ; 02.04.2014
comment
@ Вики, да, я понимаю. Проблема в том, что вы, вероятно, все еще хотите скрыть эти кнопки для последней строки суммирования. В настоящее время мы делаем это для последней строки отображаемой сетки, которая не всегда является строкой суммирования. Итак, чтобы правильно решить задачу, нам нужно понять, как отличить последнюю строку на каждой странице от строки суммирования. - person Andrei; 02.04.2014
comment
Да исправить. Строка суммирования будет самой последней строкой в ​​представлении сетки. - person ; 02.04.2014

Лучшее место для данных суммирования — нижний колонтитул, который позаботится о наличии элементов управления командами, поскольку они не добавляются в нижний колонтитул.

См. раздел отображение сводных данных в нижнем колонтитуле.

Также: Что такое проблема XY?

Пример (должно быть легко преобразовано в С#):

'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
person fnostro    schedule 01.04.2014

Попробуй это

установите для видимости столбца кнопки редактирования и удаления значение 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
}
}
person Learner    schedule 01.04.2014