首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在数据网格中查看自生成列的顺序是合适的吗?

在数据网格中查看自生成列的顺序是合适的吗?
EN

Stack Overflow用户
提问于 2015-02-09 05:37:58
回答 1查看 159关注 0票数 1

我正在根据我的模型的定义自动生成一堆列。我想对它们的显示顺序有更多的控制。从引发的事件中这样做是否合适,如下所示?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void OnAutoGeneratedColumns(Object sender, EventArgs eventArgs) { ... }

或者,是否有一种方法可以对定义类的字段进行属性化,以便我可以控制它们显示的顺序?我将数据网格绑定到视图模型中的列表集合视图,在该视图中执行对要显示的行和要隐藏的行的筛选。我应该用这个来代替吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ListCollectionView AllThingiesView { ... }

或者,也许这是一种不合适的方法来自动生成列呢?我正在添加我自己的一些,在模型中实际上没有相应的属性。

编辑

根据这些评论,我认识到这个问题可能会得到澄清。我得到了部分答案--使用DisplayOrder。这就回答了如何做它的问题,。但是,主要的问题是在哪里使用(或者when)来完成它。我已经提出了几个建议,关于该属性可能设置的位置,可能还有其他的(更好的)。

此外,似乎还不清楚什么是属性。我想知道是否可以使用属性控制/指定列的索引(我指的是属性上的属性,而不是属性本身)。例如,下面的伪代码显示了可以是一种可能的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class GridableThing
{
  [Index(3)]
  public String FirstProperty{ get; set; })
  [Index(1)]
  public String SecondProperty{ get; set; })
  [Index(2)]
  public String ThirdProperty{ get; set; })
}

在上面的例子中,如果没有以其他方式设置,列将以第一、第二和第三的顺序出现。通过使用网格的属性DisplayIndex,我可以使用属性的属性(属性)来排序它们。这种方法有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-10 06:53:21

在我看来,AutoGeneratingColumns事件处理程序并不适合插入管理列顺序的逻辑。当完成所有列的自动生成时,就会发生此事件,因此,当创建所有列时,您将插入一个混合它们的逻辑。可能最好是直接按照正确的顺序创建它们,而不是在第二时间重新排序。

此外,正如您所建议的,使用属性设置列顺序(类似于订单 )是很好的。在我看来,这样做意味着要描述一个类,所以我对您的问题的回答是:将您的逻辑放入CustomTypeDescriptor中。好吧,也许你需要写更多的代码,你可以说这是解决问题的一条很长的路。也许我错了,但我更喜欢这样的方法:“这是我类的列(即属性)的顺序(或者是我的模型)”。

当然,为了将类链接到CustomTypeDescriptor,需要使用TypeDescriptionProvider属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[TypeDescriptionProvider(typeof(CustomTypeDescriptionProvider))]
public class Party : INotifyPropertyChanged
{
    /* ... */
}

并扩展TypeDescriptionProvider类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CustomTypeDescriptionProvider : TypeDescriptionProvider
{
    private static TypeDescriptionProvider defaultTypeProvider =
                TypeDescriptor.GetProvider(typeof(Party));

    public CustomTypeDescriptionProvider()
        : base(defaultTypeProvider)
    {
    }

    public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
    {
        ICustomTypeDescriptor defaultDescriptor =
                            base.GetTypeDescriptor(objectType, instance);

        return new CustomTypeDescriptor(defaultDescriptor, instance);
    }

    public ICustomTypeDescriptor GetBaseTypeDescriptor(Type objectType, object instance)
    {
        return base.GetTypeDescriptor(objectType, instance);
    }
}

最后一步是创建您的CustomTypeDescriptor

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CustomTypeDescriptor : System.ComponentModel.CustomTypeDescriptor
{
    private List<PropertyDescriptor> propertyDescriptors = new List<PropertyDescriptor>();
    private PropertyDescriptorCollection propertyDescriptorCollection;

    public CustomTypeDescriptor(ICustomTypeDescriptor parent, object instance)
        : base(parent)
    {
        CustomTypeDescriptionProvider customTypeDescriptionProvider = new WpfApplication1.CustomTypeDescriptionProvider();
        ICustomTypeDescriptor typeDescriptor = customTypeDescriptionProvider.GetBaseTypeDescriptor(typeof(Party), null);
        PropertyDescriptorCollection tempPropertyDescriptorCollection = typeDescriptor.GetProperties();
        propertyDescriptors.Add(tempPropertyDescriptorCollection[2]);
        propertyDescriptors.Add(tempPropertyDescriptorCollection[1]);
        propertyDescriptors.Add(tempPropertyDescriptorCollection[0]);
        /* put here your ordering logic */

        propertyDescriptorCollection = new PropertyDescriptorCollection(propertyDescriptors.ToArray());
    }

    public override PropertyDescriptorCollection GetProperties()
    {
        return propertyDescriptorCollection;
    }

    public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
    {
        return propertyDescriptorCollection;
    }
}

这里,我使用默认的TypeDescriptor来检索PropertyDescriptors of Party对象。然后,按照我喜欢的方式对它们进行排序(最终,我可以读取属性以确定正确的顺序)。

很高兴听到一些对我的想法的反馈。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28411066

复制
相关文章
愿未来没有 Webpack
现在是 1941 年。你的名字是 Richard Hubbell。你在 CBS 旗下的一个试验性的纽约电视演播室工作。你将要主持一场重大电视新闻广播,这是世界上首批电视节目之一,你还有 15 分钟就要上场了。你知道你一会儿要干嘛吗?
ConardLi
2019/09/10
6570
愿未来没有 Webpack
webpack版本问题_webpack查询有没有安装
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169196.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
6560
Sass/Scss、Less 是什么?
Sass (Syntactically Awesome Stylesheets) 是一种动态样式语言,Sass 语法属于缩排语法,比 css 比多出好些功能 (如变量、嵌套、运算,混入 (Mixin)、继承、颜色处理,函数等),更容易阅读。
CRMEB商城源码
2022/08/02
1.2K0
从webpack到rollup
这种代码读起来相当费劲,先找到_myModule2对应的__webpack_require__id,再找对应的模块定义,最后看该模块exports身上挂了什么东西。模块定义这个部分很讨厌,延长了阅读引用链
ayqy贾杰
2019/06/12
1.5K0
从webpack到rollup
Webpack之before快速创建接口
上次分享了用webpack的express模块快速启动一个服务接口,其实webpack还有HTTP模块也可以快速创建接口,有兴趣的可以去查查。今天要分享的也是基于express,但是是通过webpack的decServer创建的,不存在跨域问题。
wade
2020/04/24
5160
给初学者的Gulp教程(译)
Gulp是一个在你开发web时,帮助你完成几个任务的工具。它经常用来进行一些前端任务,比如:
治电小白菜
2020/08/25
4.4K0
给初学者的Gulp教程(译)
webpack 从入门到放弃
Webpack + ES6 已经成为目前最流行的前端解决方案,本文是 Webpack2 学习教程。
李振
2021/11/26
5910
创建没有按钮的UIAlertView
默认的,UIAlertView都有一个或者多个按钮,如果你想创建没有按钮的UIAlertView,可以使用以下的方法:
EltonZheng
2021/01/26
1.3K0
创建没有按钮的UIAlertView
webpack原理分析
loader原理loader 概念帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。loader 执行顺序了解执行顺序之前,需要先了解loader的分类pre: 前置 loadernormal: 普通 loaderinline: 内联 loaderpost: 后置 loader执行顺序4 类 loader 的执行优级为:pre > normal > inline > post 。相同优先级的 loader 执行顺序为:从右到左,从下到上。 // 此时loader执行顺序:lo
程序猿川子
2022/06/10
1300
webpack从0到1构建
webpack是一个静态打包工具,根据入口文件构建一个依赖图,根据需要的模块组合成一个bundle.js或者多个bundle.js,用它来展示静态资源
Maic
2022/07/28
1.3K0
webpack从0到1构建
webpack从零搭建开发环境
为了方便也可以这么写,使用 npm run 命令这个命令执行的时候默认会把 node_modules 的.bin 文件放到全局上,执行之后销毁npm run buildnpm run dev
小丑同学
2020/09/21
1.3K0
从零认识webpack4.0,带你走进神秘的webpack
前言: 作为一个现代javascript 应用程序的静态模块打包器,webpack能将各种资源,如js,css, 图片等作为模块来处理,是当下前端工程化的一个很受欢迎的工具,webpack目前最新的版本是4.0,文章将在4.0 的基础上,从使用者的角度,一步步教你认识并搭建一个简单的webpack配置项目,当然webpack的配置和使用较为丰富且复杂。
前端老鸟
2019/07/29
4680
从零认识webpack4.0,带你走进神秘的webpack
关于Parcel你需要知道的所有内容:超快的Web应用打包器
本文最初发布于 Medium 上 freeCodeCamp 的博客站点,经原作者授权由 InfoQ 中文站翻译并分享。 什么?又有一个打包器(bundler)/ 构建工具?是的——果真如此,演化和创新相结合为我们带来了 Parcel: https://parceljs.org/ Parcel 有什么特殊之处,为什么值得关注呢? webpack 要有大量的配置,这样带来的成本就是复杂性——与此相对的,Parcel 带来了简洁性。Parcel 将自己标榜为“零配置”。 Parcel 内置了一个开发服务器
企鹅号小编
2018/02/07
1.1K0
关于Parcel你需要知道的所有内容:超快的Web应用打包器
基于webpack,不使用任何脚手架,创建纯粹的webpack项目
1.新建一个目录,通过 npm init 初始化一个项目,这个时候仅生成一个package.json 文件,如下:
问问计算机
2023/02/24
6980
基于webpack,不使用任何脚手架,创建纯粹的webpack项目
webpack学习(四)extract-text-webpack-plugin插件
二、extract-text-webpack-plugin插件 从 bundle 中提取文本(CSS)到单独的文件 安装 npm install extract-text-webpack-plugin --save-dev  用法 var ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = { module: { rules: [ { test: /\.css$/
柴小智
2018/04/10
8900
从Highlight浅谈Webpack按需加载
最近有在使用 highlight.js 做代码的高亮展示,主要是展示对 SQL 语言的处理。看了看 highlight.js 的提供的相关代码
MrTreasure
2018/08/09
2K0
从Highlight浅谈Webpack按需加载
我们为什么从 Webpack 转向 Vite
作者 | Sergei Chestakov 译者 | 王强 策划 | 李俊辰 在 Replit,我们的使命是让更多人轻松编写代码。我们为大家提供了免费的云端计算资源,让人们可以在任何设备上构建应用。如今,React 是 Web 上最流行的应用创建方法之一。但长期以来,React 工具链在 Replit 上跑得都很慢。尽管 JavaScript 生态系统为专业开发人员提供了很多出色的工具,但其中许多最流行的工具(例如 Create React App 和 Webpack)逐渐变得愈加复杂和效率低下。 所幸我们
深度学习与Python
2023/04/01
4330
我们为什么从 Webpack 转向 Vite
创建maven项目没有显示项目结构
有一些同学创建Maven项目尤其是从git库中拉取了Maven项目之后没有显示项目结构,该怎么办??
明明如月学长
2021/08/31
1.1K0
创建maven项目没有显示项目结构
初探webpack之从零搭建Vue开发环境
平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码,但这会造成我们过度依赖vue-cli,忽视了webpack的重要性,当遇到一些特殊场景时候,例如Vue多入口的配置、优化项目的打包速度等等时可能会无从下手。当然现在才开始学习vue2 + webpack可能有点晚,毕竟现在都在考虑转移到vue3 + vite了哈哈。
WindRunnerMax
2021/10/20
1.2K1
创建MySQL从库
我们知道Oracle有DataGuard实时备份数据。能够做主备切换,而MySQL也有自己的一套备库方案。称之为主从复制。
全栈程序员站长
2022/07/10
1.6K0

相似问题

告诉角为`styles.css`而不是`styles.scss`服务

38

可以将全局styles.css文件转换为styles.scss吗?

10

我如何在maven原型中实现一个主题?(styles.css、styles.scss等)

111

Angular2 Webpack资产与全球styles.css

12

Webpack建设成功,但styles.css文件风格没有体现出来

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文