如何使用C#为网格除首列外的所有列应用样式?
解决网格列样式排除第一列的问题
我懂你遇到的困扰啦——直接用对象引用比较col != r.MasterTableView.Columns[0]很容易踩坑,因为不同集合里的列对象引用可能不是同一个实例(取决于控件内部实现),导致条件判断不符合预期,所以代码直接跳过了样式设置环节。这里给你两种更可靠的写法:
方法一:通过列索引判断
遍历的时候记录当前列的索引,直接跳过索引为0的第一列:
int columnIndex = 0; foreach(GridColumn col in r.Columns) { if (columnIndex != 0) { col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; } columnIndex++; }
方法二:通过UniqueName判断(推荐)
如果你的第一列有固定的UniqueName属性,用这个判断更稳妥,后续调整列顺序也不会影响逻辑:
// 替换成你第一列实际的UniqueName值 string firstColumnUniqueName = "IdColumn"; foreach(GridColumn col in r.Columns) { if (!col.UniqueName.Equals(firstColumnUniqueName)) { col.ItemStyle.HorizontalAlign = HorizontalAlign.Center; } }
简单说下原写法失效的原因:r.Columns和r.MasterTableView.Columns虽然指向的是同一组列,但集合中的对象引用可能不是同一个实例,直接用!=比较引用会导致判断逻辑失效,自然就没进入if块执行样式设置了。
内容的提问来源于stack exchange,提问作者Smith Stanley
相关产品推荐
相关产品推荐

