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