Skip to main content

ASPxCardView.CardDeleting Event

Enables you to prevent a card from being deleted.

Namespace: DevExpress.Web

Assembly: DevExpress.Web.v22.2.dll

NuGet Package: DevExpress.Web


public event ASPxDataDeletingEventHandler CardDeleting

Event Data

The CardDeleting event's data class is ASPxDataDeletingEventArgs. The following properties provide information specific to this event:

Property Description
Cancel Gets or sets a value indicating whether the event should be canceled. Inherited from CancelEventArgs.
Keys Gets a dictionary of field name/value pairs that represent the primary key of the row to delete.
Values Gets a dictionary of the non-key field name/value pairs for the row to delete.


The CardDeleting event occurs when an end-user has clicked the Delete command or the ASPxCardView.DeleteCard method has been called. To cancel the delete operation, set the event parameter’s Cancel property to true.

After a card has been deleted, the ASPxCardView.CardDeleted event is raised.


The following example creates an unbound column that calculates the sum of other columns and changes its values dynamically when an end-user changes a grid value in Batch edit mode.

View Example

<head runat="server">
    <script type="text/javascript">
        function OnBatchEditEndEditing(s, e) {
            window.setTimeout(function () {
                var price = s.batchEditApi.GetCellValue(e.visibleIndex, "Price");
                var quantity = s.batchEditApi.GetCellValue(e.visibleIndex, "Quantity");
                s.batchEditApi.SetCellValue(e.visibleIndex, "Sum", price * quantity);
            }, 10);
    <form id="form1" runat="server">

        <dx:ASPxCardView ID="Grid" runat="server" KeyFieldName="ID" OnBatchUpdate="ASPxCardView1_BatchUpdate" 
            OnCardInserting="ASPxCardView1_CardInserting" OnCardUpdating="ASPxCardView1_CardUpdating" OnCardDeleting="ASPxCardView1_CardDeleting"             
            OnCustomUnboundColumnData="ASPxCardView1_CustomUnboundColumnData" AutoGenerateColumns="False">
            <ClientSideEvents BatchEditEndEditing="OnBatchEditEndEditing" />
            <SettingsEditing Mode="Batch">
                <dx:CardViewSpinEditColumn FieldName="Quantity" VisibleIndex="0">
                    <PropertiesSpinEdit DisplayFormatString="g">
                <dx:CardViewSpinEditColumn FieldName="Price" VisibleIndex="1">
                    <PropertiesSpinEdit DisplayFormatString="g">
                <dx:CardViewTextColumn FieldName="Sum" ReadOnly="True" UnboundType="Decimal" VisibleIndex="2">
                    <dx:CardViewCommandLayoutItem HorizontalAlign="Right" ShowDeleteButton="True" ShowEditButton="True" ShowNewButton="True">
                    <dx:CardViewColumnLayoutItem ColumnName="Quantity">
                    <dx:CardViewColumnLayoutItem ColumnName="Price">
                    <dx:CardViewColumnLayoutItem ColumnName="Sum">
                    <dx:EditModeCommandLayoutItem HorizontalAlign="Right">

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web;

public partial class _Default : System.Web.UI.Page
    protected List<GridDataItem> GridData {
            var key = "34FAA431-CF79-4869-9488-93F6AAE81263";
            if (!IsPostBack || Session[key] == null)
                Session[key] = Enumerable.Range(1, 100).Select(i => new GridDataItem
                    ID = i,
                    Quantity = i * 10 % 7 % i,
                    Price = i * 0.5 % 3
            return (List<GridDataItem>)Session[key];
    protected void Page_Load(object sender, EventArgs e) {
        Grid.DataSource = GridData;
    protected void ASPxCardView1_BatchUpdate(object sender, DevExpress.Web.Data.ASPxDataBatchUpdateEventArgs e) {
        foreach (var args in e.InsertValues)
        foreach (var args in e.UpdateValues)
            UpdateItem(args.Keys, args.NewValues);
        foreach (var args in e.DeleteValues)
            DeleteItem(args.Keys, args.Values);

        e.Handled = true;
    protected void ASPxCardView1_CardInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) {
    protected void ASPxCardView1_CardUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) {
        UpdateItem(e.Keys, e.NewValues);
    protected void ASPxCardView1_CardDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e) {
        DeleteItem(e.Keys, e.Values);
    protected void ASPxCardView1_CustomUnboundColumnData(object sender, DevExpress.Web.ASPxCardViewColumnDataEventArgs e) {
        if (e.Column.FieldName == "Sum")
            decimal price = Convert.ToDecimal(e.GetListSourceFieldValue("Price"));
            int quantity = Convert.ToInt32(e.GetListSourceFieldValue("Quantity"));

            e.Value = price * quantity;
    protected GridDataItem InsertNewItem(OrderedDictionary newValues) {
        var item = new GridDataItem() { ID = GridData.Count };
        LoadNewValues(item, newValues);
        return item;
    protected GridDataItem UpdateItem(OrderedDictionary keys, OrderedDictionary newValues) {
        var id = Convert.ToInt32(keys["ID"]);
        var item = GridData.First(i => i.ID == id);
        LoadNewValues(item, newValues);
        return item;
    protected GridDataItem DeleteItem(OrderedDictionary keys, OrderedDictionary values) {
        var id = Convert.ToInt32(keys["ID"]);
        var item = GridData.First(i => i.ID == id);
        return item;
    protected void LoadNewValues(GridDataItem item, OrderedDictionary values) {
        item.Quantity = Convert.ToInt32(values["Quantity"]);
        item.Price = Convert.ToDouble(values["Price"]);
    protected void CancelEditing(CancelEventArgs e) {
        e.Cancel = true;
    public class GridDataItem {
        public int ID { get; set; }
        public int Quantity { get; set; }
        public double Price { get; set; }
See Also