C#实现DataGrid(GridView)动态生成列

有时候需要在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 
= "";
     }

}



转:
http://www.techmango.com/blog/article.asp?id=470
posted @ 2008-04-23 20:58  平常心成大事  阅读(2184)  评论(0编辑  收藏  举报