有时候需要在DataGrid(GridView)里显示的数据列数是不固定的,而且还需要对数列列进行控制,如显示或隐藏,这时我们就不能用DataGrid里的自动生成列,更不能对列做数据绑定了,但我们有个办法,就是动态地生成数据列,DataGrid的动态列其实就是以类的形式存在,功能很强大.
要实现动态列,首先要添加一个类文件,这个类必须要继承ITemplate接口,主要是要实现一个方法:InstantiateIn,在InstantiateIn里做的是对该动态列做事件控制的绑定,如OnDataBinding,OnDataBinding就相当于DataGrid的ItemDataBound事件了,这样就可以对该动态列的每一行做相应处理了.
这样有了动态列,你就可以按某些条件来对列进行相应的控制了,如在配置文件定义他们的个数,哪些该不该显示等等.
具体实现源码如下:
程序代码
public class DynamicColumn:ITemplate
{
private string colname;
private int colvalue;
//构造函数,能传入必要的参数,当然也可属性的方式传入参数
public DynamicColumn(string p_colname, int p_colvalue)
{
colname = p_colname;
colvalue = p_colvalue;
}
//指定了在控件Label lb上做DataBinding事件的绑定
public void InstantiateIn(Control container)
{
Label lb = new Label();
lb.DataBinding += new EventHandler(this.OnDataBinding);
container.Controls.Add(lb);
}
//这里是我的具体绑定操作,你可以写自己的
public void OnDataBinding(object sender, EventArgs e)
{
Label lb = (Label)sender;
int AndResult = 0;
DataGridItem container = (DataGridItem) lb.NamingContainer;
AndResult = int.Parse(((DataRowView)container.DataItem)[colname].ToString());
if( AndResult == colvalue)
lb.Text = "√";
else
lb.Text = "";
}
}