DevExpress.Blazor项目定制DataGridToolbar工具栏

前端DataGridToolbar.razor根据实现需要增加工具栏链接

@inherits DataGridToolbarBase

<DxToolbar ItemRenderStyleMode="ToolbarRenderStyleMode.Plain" ItemSizeMode="SizeMode.Small" CssClass="@CssClass">
    <DxToolbarItem Text="Clear"
                   BeginGroup="true"
                   Click="@OnClearButtonClick"
                   IconCssClass="mdi mdi-18px mdi-minus-box-outline"
                   CssClass="font-bigger"
                   Vislble="@ClearButtonVisible"/>
    <DxToolbarItem Text="New"
                   BeginGroup="true"
                   Click="@OnAddButtonClick"
                   IconCssClass="mdi mdi-18px mdi-file-outline"
                   Enabled="@(IsBusy == false && CanCreate)"
                   CssClass="font-bigger"
                   Visible="@(IsAddButtonVisible && AddButtonVisible && ReadOnly == false)"/>
    <DxToolbarItem Text="Edit"
                   Click="@OnEditButtonClick"
                   IconCssClass="mdi mdi-18px mdi-file-edit-outline"
                   Enabled="@(IsBusy == false && SelectedCount == 1 && CanEdit)"
                   CssClass="font-bigger"
                   Visible="@(IsEditButtonVisible && EditButtonVisible && ReadOnly == false)"/>
    <DxToolbarItem Text="Delete"
                   Click="@OnDeleteButtonClick"
                   IconCssClass="mdi mdi-18px mdi-delete-outline"
                   Enabled="@(IsBusy == false && SelectedCount >= 1 && IsPermanent == false && CanDelete)"
                   CssClass="font-bigger"
                   Visible="@(IsDeleteButtonVisible && DeleteButtonVisible && ReadOnly == false)"/>
    <DxToolbarItem Text="Restore"
                   Click="@OnRestoreButtonClick"
                   BeginGroup="true"
                   IconCssClass="mdi mdi-18px mdi-restore"
                   Enabled="@(IsBusy == false && SelectedCount >= 1 && IsPermanent == false && CanRestore)"
                   CssClass="font-bigger"
                   Visible="@(IsRestoreButtonVisible && RestoreButtonVisible && ReadOnly == false)"/>

    @ChildContent

    <DxToolbarItem BeginGroup="true"
                   Alignment="ToolbarItemAlignment.Right"
                   Tooltip="Show filter row"
                   Click="@OnFilterButtonClick"
                   IconCssClass="mdi mdi-18px mdi-filter-outline"
                   Enabled="@(IsBusy == false)"/>

    @if (IsShowColumnChooser)
    {
        <DxDataGridColumnChooserToolbarItem BeginGroup="true"
                                            Alignment="ToolbarItemAlignment.Right"
                                            Tooltip="Column chooser"/>
    }
</DxToolbar>

后端代码实现

using System.Threading.Tasks;
using DevExpress.Blazor;
using Microsoft.AspNetCore.Components;
using DataServices.Client.Services;
using DataServices.Shared.Data.Models;

namespace DataServices.Client.Components
{
    public class DataGridToolbarBase : ComponentBase
    {
        private string _cssClass = "mb-2";
        private bool _clearButtonVisible = true;
        private bool _addButtonVisible = true;
        private bool _deleteButtonVisible = true;
        private bool _editButtonVisible = true;

        private bool _isAdmin;
        private bool _isBusy;
        private bool _isShowColumnChooser = true;
        private bool _neededToRefresh;
        private TgClaimTypes _requiredClaimType;
        private bool _restoreButtonVisible = true;
        private int _selectedCount;

        protected bool IsAddButtonVisible;
        protected bool IsDeleteButtonVisible;
        protected bool IsEditButtonVisible;
        protected bool IsRestoreButtonVisible;
        [Inject] private IUserService UserService { get; set; }

        [Parameter] public RenderFragment ChildContent { get; set; }

        [Parameter] public EventCallback<bool> IsBusyChanged { get; set; }
        [Parameter] public EventCallback<TgClaimTypes> RequiredClaimTypeChanged { get; set; }
        [Parameter] public EventCallback<int> SelectedCountChanged { get; set; }
        [Parameter] public EventCallback<bool> IsShowColumnChooserChanged { get; set; }
        [Parameter] public EventCallback<TgDataGridToolbarClickEventArgs> OnToolbarClick { get; set; }
        [Parameter] public EventCallback<string> CssClassChanged { get; set; }
        [Parameter] public EventCallback<bool> NeededToRefreshChanged { get; set; }

        [Parameter]
        public bool IsBusy
        {
            get => _isBusy;
            set
            {
                if (Equals(_isBusy, value)) return;
                _isBusy = value;
                IsBusyChanged.InvokeAsync(value);
                StateHasChanged();
            }
        }

        [Parameter]
        public TgClaimTypes RequiredClaimType
        {
            get => _requiredClaimType;
            set
            {
                if (Equals(_requiredClaimType, value)) return;
                _requiredClaimType = value;
                RequiredClaimTypeChanged.InvokeAsync(value);
                StateHasChanged();
            }
        }

        [Parameter]
        public int SelectedCount
        {
            get => _selectedCount;
            set
            {
                if (Equals(_selectedCount, value)) return;
                _selectedCount = value;
                SelectedCountChanged.InvokeAsync(value);
                StateHasChanged();
            }
        }

        [Parameter]
        public bool IsShowColumnChooser
        {
            get => _isShowColumnChooser;
            set
            {
                if (Equals(_isShowColumnChooser, value)) return;
                _isShowColumnChooser = value;
                IsShowColumnChooserChanged.InvokeAsync(value);
                StateHasChanged();
            }
        }

        [Parameter]
        public string CssClass
        {
            get => _cssClass;
            set
            {
                if (Equals(_cssClass, value)) return;
                _cssClass = value;
                CssClassChanged.InvokeAsync(value);
                StateHasChanged();
            }
        }

        [Parameter]
        public bool NeededToRefresh
        {
            get => _neededToRefresh;
            set
            {
                if (Equals(_neededToRefresh, value)) return;
                _neededToRefresh = value;
                if (_neededToRefresh) StateHasChanged();

                NeededToRefreshChanged.InvokeAsync(false);
            }
        }

        [Parameter]
        public bool ClearButtonVisible
        {
            get => _clearButtonVisible;
            set
            {
                if (Equals(_clearButtonVisible, value)) return;
                _clearButtonVisible = value;
                StateHasChanged();
            }
        }
        
        [Parameter]
        public bool AddButtonVisible
        {
            get => _addButtonVisible;
            set
            {
                if (Equals(_addButtonVisible, value)) return;
                _addButtonVisible = value;
                StateHasChanged();
            }
        }

        [Parameter]
        public bool EditButtonVisible
        {
            get => _editButtonVisible;
            set
            {
                if (Equals(_editButtonVisible, value)) return;
                _editButtonVisible = value;
                StateHasChanged();
            }
        }

        [Parameter]
        public bool DeleteButtonVisible
        {
            get => _deleteButtonVisible;
            set
            {
                if (Equals(_deleteButtonVisible, value)) return;
                _deleteButtonVisible = value;
                StateHasChanged();
            }
        }

        [Parameter]
        public bool RestoreButtonVisible
        {
            get => _restoreButtonVisible;
            set
            {
                if (Equals(_restoreButtonVisible, value)) return;
                _restoreButtonVisible = value;
                StateHasChanged();
            }
        }

        [Parameter] public bool ReadOnly { get; set; }
        [Parameter] public bool IsPermanent { get; set; }

        [Parameter] public bool CanCreate { get; set; } = true;
        [Parameter] public bool CanEdit { get; set; } = true;
        [Parameter] public bool CanDelete { get; set; } = true;
        [Parameter] public bool CanRestore { get; set; } = true;

        protected override async Task OnInitializedAsync()
        {
            await UserService.LoadAsync();
            _isAdmin = UserService.IsAdminLevel;

            var permission = await UserService.GetPermissionAsync(RequiredClaimType);

            IsAddButtonVisible = _isAdmin || permission.Value >= TgPermissions.Create.Value;
            IsEditButtonVisible = _isAdmin || permission.Value >= TgPermissions.Update.Value;
            IsDeleteButtonVisible = _isAdmin || permission.Value >= TgPermissions.Delete.Value;
            IsRestoreButtonVisible = _isAdmin;
        }

        protected void OnClearButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Clear",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }
        
        protected void OnAddButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Add",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }

        protected void OnEditButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Edit",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }

        protected void OnDeleteButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Delete",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }

        protected void OnRestoreButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Restore",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }

        protected void OnFilterButtonClick(ToolbarItemClickEventArgs args)
        {
            var eventArgs = new TgDataGridToolbarClickEventArgs
            {
                Name = "Filter",
                MouseEventArgs = args.MouseEventArgs
            };
            OnToolbarClick.InvokeAsync(eventArgs);
        }
    }
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值