Удаление записей в окне сообщения об ошибке gridview в ASP.NET C # - PullRequest
1 голос
/ 06 мая 2011

Как я могу создать окно сообщения об ошибке, когда пользователь удаляет запись, связанную с другими записями в таблицах в gridview? Если пользователь удаляет категорию из TblCategory, я хочу, чтобы он генерировал окно с сообщением об ошибке, которое сообщит пользователю, что в этой категории еще есть книги, и не удалит, если он не удалит все записи, связанные с этой категорией.

Заранее спасибо.

Мой код:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="categoryid" DefaultMode="Insert"
        DataSourceID="categoryDataSource">

        <EditItemTemplate>

            categoryid:
            <asp:Label ID="categoryidLabel1" runat="server" 
            Text='<%# Eval("categoryid") %>' />
            <br />

            Name:
            <asp:TextBox ID="nameTextBox" runat="server" 
            Text='<%# Bind("name") %>' />
            <br />

            <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" 
                CommandName="Update" Text="Update" />
                &nbsp;
                <asp:LinkButton ID="UpdateCancelButton" runat="server" 
                CausesValidation="False" CommandName="Cancel" Text="Cancel" />

        </EditItemTemplate>

        <InsertItemTemplate>

            Name:
            <asp:TextBox ID="nameTextBox" runat="server" 
            Text='<%# Bind("name") %>' />
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="* Required" ControlToValidate="nameTextBox" ValidationGroup="createcategory">
            </asp:RequiredFieldValidator>
            <br />

            <asp:Button ID="InsertButton" runat="server" CausesValidation="True" ValidationGroup="createcategory" 
                CommandName="Insert" Text="Create" />
                <asp:Button ID="InsertCancelButton" runat="server" 
                CausesValidation="False" CommandName="Cancel" Text="Cancel" />
        </InsertItemTemplate>

        <ItemTemplate>
            <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
                CommandName="New" Text="New" />
        </ItemTemplate>
        <EmptyDataTemplate>
            <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
                CommandName="New" Text="New" />
        </EmptyDataTemplate>
    </asp:FormView>
    <asp:SqlDataSource ID="categoryDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
        DeleteCommand="DELETE FROM [TblCategory] WHERE [categoryid] = @categoryid" 
        InsertCommand="INSERT INTO [TblCategory] ([name]) VALUES (@name)" 
        SelectCommand="SELECT [categoryid], [name] FROM [TblCategory]" 
        UpdateCommand="UPDATE [TblCategory] SET [name] = @name WHERE [categoryid] = @categoryid">
        <DeleteParameters>
            <asp:Parameter Name="categoryid" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="categoryid" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="name" Type="String" />
        </InsertParameters>
    </asp:SqlDataSource>
</p>
<h4 class="style6">
    List of Categories</h4>
<p>
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" 
        DataKeyNames="categoryid" DataSourceID="categoryDataSource" ForeColor="#333333" 
        GridLines="None" RowDeleted="grdCategory_RowDeleted">
        <RowStyle BackColor="#EFF3FB" />
        <Columns>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
            <asp:BoundField DataField="name" HeaderText="Name" SortExpression="name" />
        </Columns>
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#2461BF" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Существует RowDeleted событие gridview, которое вам нужно использовать.Он сработает после выполнения команды Delete.Это сработает независимо от того, была ли успешно удалена ваша строка.

 protected void grdCategory_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
    if (e.Exception != null)
    {
        if (e.Exception.InnerException.Message == "ContainBooks") // I suppose, you will throw "ContainBooks" in exception from your BLL when your category Having books
        {
            //Display Warning Message Here, that You can Delete
        }
        else
        {
            lblException.Text = e.Exception.InnerException.Message;
        }

        e.ExceptionHandled = true;
    }
    else if (e.AffectedRows != 0)
    {
        //Display Success Message that Record Deleted Successfully
    }
}

Событие RowDeleted возникает при нажатии кнопки строки Delete, но после удаления элемента управления GridViewстрока.Это позволяет вам предоставлять метод обработки событий, который выполняет пользовательскую процедуру, такую ​​как проверка результатов операции удаления, всякий раз, когда происходит это событие.

От MSDN

0 голосов
/ 28 октября 2013
    protected void MyGridView_RowDeleted(object sender, GridViewDeletedEventArgs e)
    {
        if (e.Exception is SqlException)
        {
            int sqlErrorCode = ((SqlException)e.Exception).Number;

            if (sqlErrorCode == 547)
            {
                // SQL Error Code 547:
                //    "The DELETE statement conflicted with the REFERENCE 
                //     constraint "FK_SomeTable"
                // 
                //  You can display a friendly error message here and tell
                //  the system that you have handled the error
                // 
                myTextBox_ErrorMessage.Text = @"Data could not be deleted.
                                              Other data in the system is 
                                              currently referencing this data.";
                e.ExceptionHandled = true;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...