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
相关产品推荐
相关产品推荐

