可以发现运行时创建GridView模板列是很繁琐的事情,因此没有特殊需求,应该使用页面声明方式,动态解析构造Template这些繁琐易错的事情交由ASP.NET解析器完成。
运行时动态任何服务器控件,必须确保每次请求/回发时,动态创建控件代码都能运行,典型错误是将这些放在一个Button_Click中,当其他PostBack的时候,这些控件将会丢失。
代码技巧:匿名方法与 as 关键字的使用(C#中类型转换)
很多朋友想通过动态创建列,来按需加载目标列,想法是好的,但鉴于ASP.NET原理特别是生命周期与ViewState的特殊性,这是易错又吃力不讨好的苦差事。
个人建议是使用:
假如DataSource是DataTable/DataView(或者DTO),使其包含只需要的Column,设置GridView.AutoGenerateColumns=true,由GridView内部在运行时自动反射创建列。
以声明方式声明全部所需的Column,运行时调整GridView.Columns[index].Visible来控制列的可见性。