Отменить редактирование во время Gridview_RowEditing ()? - PullRequest
0 голосов
/ 31 января 2019

Я хочу отменить редактирование строки во время RowEditing, если текущий пользователь не имеет необходимых разрешений.

Вот как RowEditing выглядит:

protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    string user = GetCurrentUser();
    if (user == string.Empty)
    {
        /* Show message alert */
        return;
    }
    GridView.EditIndex = e.NewEditIndex;
    BindData();
}

Это отменяет Обновление , и столбец продолжает ссылку Редактировать .Но если я снова нажму Изменить , появится сообщение об ошибке:

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

Я предполагаю, что это необходимо при скрытии элементов управления передвыполняется обратная передача.

Итак, мой вопрос, как мне избежать этого?

Я также пытался установить GridView.EditIndex = -1, но я получаю те же результаты:

protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView.EditIndex = e.NewEditIndex;
    BindData();
    string user = GetCurrentUser();
    if (user == string.Empty)
    {
        /* Show message alert */
        GridView.EditIndex = -1;
        BindData();
        return;
}

1 Ответ

0 голосов
/ 31 января 2019
 protected void GridView1_RowEditing(object sender, System.Web.UI.WebControls.GridViewEditEventArgs e)
        {
            //NewEditIndex property used to determine the index of the row being edited.  
            gvBookStoreRecords.EditIndex = e.NewEditIndex;
            gridDataBind();
        }
        protected void GridView1_RowUpdating(object sender, System.Web.UI.WebControls.GridViewUpdateEventArgs e)
        {
            //Finding the controls from Gridview for the row which is going to update  
            TextBox Name = gvBookStoreRecords.Rows[e.RowIndex].FindControl("Name") as TextBox;
            TextBox Birthdate = gvBookStoreRecords.Rows[e.RowIndex].FindControl("Birthdate") as TextBox;
            TextBox Gender = gvBookStoreRecords.Rows[e.RowIndex].FindControl("Gender") as TextBox;
            //Setting the EditIndex property to -1 to cancel the Edit mode in Gridview  
            gvBookStoreRecords.EditIndex = -1;
            //Call ShowData method for displaying updated data  
            gridDataBind();
        }
        protected void GridView1_RowCancelingEdit(object sender, System.Web.UI.WebControls.GridViewCancelEditEventArgs e)
        {
            //Setting the EditIndex property to -1 to cancel the Edit mode in Gridview  
            gvBookStoreRecords.EditIndex = -1;
            gridDataBind();
        }    
*--------------------------------------------------------------------------------*
    <asp:GridView ID="gvBookStoreRecords" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" OnSelectedIndexChanged="gvBookStoreRecords_SelectedIndexChanged" OnRowCancelingEdit="GridView1_RowCancelingEdit"   

    OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
                    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                    <Columns>  
                    <asp:TemplateField>  
                        <ItemTemplate>  
                            <asp:Button ID="btn_Edit" runat="server" Text="Edit" CommandName="Edit" />  
                        </ItemTemplate>  
                        <EditItemTemplate>  
                            <asp:Button ID="btn_Update" runat="server" Text="Update" CommandName="Update"/>  
                            <asp:Button ID="btn_Cancel" runat="server" Text="Cancel" CommandName="Cancel"/>  
                        </EditItemTemplate>  
                    </asp:TemplateField>
                </Columns>  
                    <EditRowStyle BackColor="#999999" />
                    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                    <SortedAscendingCellStyle BackColor="#E9E7E2" />
                    <SortedAscendingHeaderStyle BackColor="#506C8C" />
                    <SortedDescendingCellStyle BackColor="#FFFDF8" />
                    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                </asp:GridView>*
...