扩展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;
        }
    }
}

完成

时间: 2025-01-12 18:49:10

扩展XAF模型信息实现自定义功能的相关文章

如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock

如何在App中实现朋友圈功能 之二 快速实现用户信息的自定义 自我关联社交元素: anSocial中很多的社交元素API,如帖子(Post).相册(Album).文件(File)等,这些API的可选参数中允许传入其他社交元素的id. 当我们传了这些id时,服务器数据库里保存的是id,但是在返回结果里,会将这些id以对象的形式返回. 这样就大大提升了查询效率,原本需要查询两次的功能,现在可以一次实现,比如接下来要说的用户头像功能开发里可以利用的字段. 用户头像: 当我们在APP上创建用户,需要调用

《Programming WPF》翻译 第9章 3.自定义功能

原文:<Programming WPF>翻译 第9章 3.自定义功能 一旦你挑选好一个基类,你将要为你的控件设计一个API.大部分WPF元素提供属性暴露了多数功能,事件,命令,因为他们从框架中获取广泛的支持,以及易于使用XAML.WPF框架对routed event和命令提供了自动支持,它的依赖属性系统提供了数据半岛和动画支持.当然,你也可以写方法--对于某一种功能,方法是最好的途径.(例如,ListBox有一个ScrollIntoView方法,保证了一个特定的项目是可见的.这时从代码中能够做

python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用. 本节的代码:(Django 1.6, Python 2.7 测试环境) 大

修改jumpserver源码并且实现一个自定义功能模块

在前面已经说了,如何打开jumpserver的管理控制台并且自定义自己的数据模型.接下来实现一个自定义的功能模块. 先看效果! 一 定义好自己的模型(model) 1.1 这一块儿在前一篇博文已经讲过了 二 定义好自己的app(这里注意 一定要自定义app,不要在源码上修改别人的app,因为jumperver的源码不是那么简单的..可能用各种问题) 2.1 python manage.py startapp XXX 通过以上步骤就可以建立自己的app 三  自定义URL 这块儿不难, 直接把我新

asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化

原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息 在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: : 如果你的环境是英文的,那么你的提示信息就是中英文夹杂的了. 在这种情况下就需要用到自定义错误信息了.其实很简单,就是在model的验证特性中加上[ErrorMessage].比如: Model: [Required(ErrorMessage = "用户名不能为空!")] [Display(Name

系统右键自定义功能-右键备份【C#】

平时在某些公司发布网站的时候,都是手动备份文件,以免发布错误,做回滚使用.频繁的发布,在做备份的时候也会稍稍浪费点时间.当然在一些大的公司都会有一些自动发布系统,就不会出现这种问题了,对这种问题,我做了个小工具来和大家分享一下,希望都有点用途.若有误之处,还请多多指点,以免误人. 初步需求是这样子,可以在windows 系统中的右键注册一个备份的菜单,可以在选中文件或者文件夹后,右键选择备份,就可以将选中的对象自动备份到指定的文件夹中. 通过分析,需要做的主要有: 注册右键菜单 需要在右键文件和

.NET MVC4 实训记录之二(扩展WebSecurity模型下的UserProfile表)

使用VS2013创建MVC4项目后,自动生成的代码中默认使用WebSecurity模型创建用户管理,生成以下数据库: 用户信息只有ID和UserName,角色信息也只有两个基础字段.通常情况下这样的数据表不能满足我们的需求,因此对其进行扩展. 首先定义自己的用户信息.角色信息结构. 1 [Table("UserProfile")] 2 public class UserProfile 3 { 4 [Key] 5 [DatabaseGenerated(DatabaseGeneratedO

Qt之模型/视图(自定义风格)

Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风格,使用QSS + Qt二维绘图已经绰绰有余了.当然,如何让界面更美观,这个没有什么捷径,我只能说一句:无他,唯手熟尔!基本功搞扎实了,实现起来就会游刃有余...void DetailProgressBar::paint(QPainter *painter, const QStyleOptionVi

扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷新和排序(有人说UpdatePanel或第三方插件就可以实现无刷新,但是呵呵...那是重量级的无刷新实现,相信不少朋友和我一样讨厌UpdatePanel,引入一大堆很长的js库且不说,用起来感觉不到一点无刷新带来的快速),也不支持部分数据绑定分页(有人说部分数据绑定也可以用aspNetPager等第