You need to enable JavaScript to run this app. DevExpress ASP.NET中 动态创建ASPxCardView设置列数不生效如何解决
优惠活动
大模型
产品
解决方案
定价
更多

DevExpress ASP.NET中 动态创建ASPxCardView设置列数不生效如何解决

问题根因

你现在的列数设置完全放错了层级,同时创建的配置对象没有被控件绑定,所有参数都不会实际生效:

  • 控制CardView卡片排布列数、每页展示卡片数的属性,根本不属于Pager配置模块,是CardView自身的SettingsTableLayout下的参数。你之前写在ASPxCardViewPagerSettings.SettingsTableLayout下的配置,是Pager组件自身的布局规则,和卡片怎么排一点关系都没有
  • 你手动new出来的ASPxCardViewPagerSettings cvps实例,从头到尾没有赋值给CardView的内置PagerSettings属性,是个游离在控件生命周期外的孤立对象,不管给它设什么值,CardView根本不会读取
修正后的关键代码

把原来错误的Pager设置相关代码,替换成直接操作CardView自身属性的写法,和你原来的业务逻辑完全兼容:

cardGrp = new ASPxCardView();
cardGrp.ID = "CardGroup" + tab["flashboardtabid"].ToString();
tabDet.Controls.Add(cardGrp);
tpc.TabPages.Add(tabDet);

cardGrp.AutoGenerateColumns = false;
cardGrp.EnableTheming = true;
cardGrp.Theme = "SoftOrange";

// 直接配置CardView自身的表格布局,替代之前错放在Pager下的配置
cardGrp.SettingsTableLayout.ColumnCount = 5;
cardGrp.SettingsTableLayout.RowsPerPage = 20;
// 直接通过CardView内置的PagerSettings关闭分页,不需要手动new独立实例
cardGrp.PagerSettings.Visible = false;

// 替代之前用Attributes设置宽度的写法,用控件原生属性避免样式冲突
cardGrp.Width = Unit.Percentage(80);
cardGrp.Style["margin"] = "auto";
容易踩的额外坑
  • 所有布局属性的配置一定要放在DataBind()调用之前,你现在代码里的代码顺序是对的,只要把配置位置改对,就不会再出现默认3列的问题
  • 动态创建的ASPxCardView必须在每次页面生命周期的早期(Page_Init阶段)完成实例化、添加到控件树的操作,不能只在Page_Load里创建一次,否则回发时会出现控件状态丢失、渲染失效的问题

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 02:24:04