扩展XAF模型信息实现自定义功能

如何隐藏 web listview 的 编辑控制列如下图: 这列怎么让它隐藏? 

感谢【少侠】XAF_杨东 提供解答!感谢XAF_小学生整理。


 

A: 注册自定义接口IModelListViewExtender 增加控制项 .

1、定义一个IModelListViewExtender接口。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ExpressApp.Extensions.Common
{
    public interface IModelWebListViewExtender
    {
        bool HiddenCommandColumn { get; set; }
    }
}
复制代码

2、到XAF的web工程中注册这个扩展。

复制代码
using System;
using System.Linq;
using System.Text;
using System.ComponentModel;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.DC;
using System.Collections.Generic;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Updating;
using DevExpress.ExpressApp.Model.Core;
using DevExpress.ExpressApp.Model.DomainLogics;
using DevExpress.ExpressApp.Model.NodeGenerators;
using DevExpress.Persistent.BaseImpl;
using ExpressApp.Extensions.Common;

namespace 资产管理.Module.Web {
    [ToolboxItemFilter("Xaf.Platform.Web")]
    // For more typical usage scenarios, be sure to check out https://documentation.devexpress.com/eXpressAppFramework/clsDevExpressExpressAppModuleBasetopic.aspx.
    public sealed partial class 资产管理AspNetModule : ModuleBase {
        private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
        #if !DEBUG
            e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web");
            e.Handled = true;
        #endif
        }
        private void Application_CreateCustomUserModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) {
            e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), false, "Web");
            e.Handled = true;
        }
        public 资产管理AspNetModule() {
            InitializeComponent();
        }
        public override IEnumerable<ModuleUpdater> GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) {
            return ModuleUpdater.EmptyModuleUpdaters;
        }
        public override void Setup(XafApplication application) {
            base.Setup(application);
            application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore;
            application.CreateCustomUserModelDifferenceStore += Application_CreateCustomUserModelDifferenceStore;
            // Manage various aspects of the application UI and behavior at the module level.
        }
//增加这个方法:
        public override void ExtendModelInterfaces(ModelInterfaceExtenders extenders)
        {
            extenders.Add<IModelListView, IModelWebListViewExtender>();
            base.ExtendModelInterfaces(extenders);
        }
    }
}
复制代码

3、打开web的xafml,配置


 

 

4、写一个Controller来处理这些配置项目


 GridViewCommandColumn 即选择操作的列

 

复制代码
using System;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Web.Editors.ASPx;
using DevExpress.Web;

namespace ExpressApp.Extensions.Common.Web.Controllers
{
    public partial class ListViewExtenderController : ViewController
    {
        public ListViewExtenderController()
        {
            InitializeComponent();
            RegisterActions(components);

            TargetViewType = ViewType.ListView;
        }

        protected override void OnDeactivated()
        {
            ListView view = (ListView)View;
            if (view.Editor == null || !(view.Editor is ASPxGridListEditor) || ((ASPxGridListEditor)view.Editor).Control == null ||
                !(((ASPxGridListEditor)view.Editor).Control is ASPxGridView) || view.Model == null || !(view.Model is IModelWebListViewExtender))
                return;

            ASPxGridView gridView = (ASPxGridView)view.Editor.Control;
            gridView.Load -= AdjustGridView;

            base.OnDeactivated();
        }

        void AdjustGridView(object sender, EventArgs e)
        {
            ListView view = (ListView)View;
            if (view.Editor == null || !(view.Editor is ASPxGridListEditor) || ((ASPxGridListEditor)view.Editor).Control == null ||
               !(((ASPxGridListEditor)view.Editor).Control is ASPxGridView) || view.Model == null || !(view.Model is IModelWebListViewExtender))
                return;

            ASPxGridView gridView = (ASPxGridView)view.Editor.Control;            
            IModelWebListViewExtender viewExtender = (IModelWebListViewExtender)view.Model;


            foreach (GridViewColumn c in gridView.Columns)
            {
                if (c is GridViewCommandColumn)
                {

                    c.Visible = !viewExtender.HiddenCommandColumn;
                }
                
            }
        }

        protected override void OnViewControlsCreated()
        {
            base.OnViewControlsCreated();

            ListView view = (ListView)View;
            if (view.Editor == null || !(view.Editor is ASPxGridListEditor) || ((ASPxGridListEditor)view.Editor).Control == null ||
               !(((ASPxGridListEditor)view.Editor).Control is ASPxGridView) || view.Model == null || !(view.Model is IModelWebListViewExtender))
                return;

            ASPxGridView gridView = (ASPxGridView)view.Editor.Control;
            gridView.Load += AdjustGridView;
        }
    }
}
复制代码

完成

posted @   code first life  阅读(1360)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示