#region 自定义模板列类
public class GridViewTemplate : ITemplate
{
private string proName;
public GridViewTemplate()
{
}
public string ProName//要绑定的数据源字段名称
{
set { proName = value; }
get { return proName; }
}
public void InstantiateIn(Control container)//关键实现这个方法
{
LinkButton lbtn = new LinkButton();
lbtn.DataBinding += new EventHandler(lbtn_DataBinding);//创建数据绑定事件
container.Controls.Add(lbtn);
}
void lbtn_DataBinding(object sender, EventArgs e)
{
LinkButton lbtn = (LinkButton)sender;
GridViewRow container = (GridViewRow)lbtn.NamingContainer;
//关键位置
//使用DataBinder.Eval绑定数据
//ProName,MyTemplate的属性.在创建MyTemplate实例时,为此属性赋值(数据源字段)
lbtn.Text = DataBinder.Eval(container.DataItem, ProName).ToString();
lbtn.CommandName = "btnDate";
lbtn.ForeColor = System.Drawing.Color.Blue;
lbtn.CommandArgument = DataBinder.Eval(container.DataItem, ProName).ToString();
}
}
#endregion
#region 动态绑定HeadGridView
/// <summary>
/// 动态绑定HeadGridView
/// </summary>
private void BindToHeadGridView()
{
//要清零列不然后出现很多重复列
HeadGridView.Columns.Clear();
//动态生成模板列
TemplateField template = new TemplateField();
template.HeaderText = "营业日期";
GridViewTemplate mt = new GridViewTemplate();
mt.ProName = "fAccDate";//数据源字段
template.ItemTemplate = mt;
HeadGridView.Columns.Add(template);
//动态添加其他列
DataTable dtDaySale = new Organize().GetPaySaleData("VIEW_DaySale", _WhereStr).Tables[0];
//删除不需要显示的列
dtDaySale.Columns.Remove("fCustID");
dtDaySale.Columns.Remove("fOrgNo");
dtDaySale.Columns.Remove("fOrgName");
//绑定HeadGridView
HeadGridView.DataSource = dtDaySale;
HeadGridView.DataBind();
}
#endregion
//读取并绑定数据
private void Display()
{
BindToHeadGridView();
}
============注意=======
要把 Display() 放在 Page_Load()事件里(if(!IsPostBack)的外边),否则会出现丢失模板列的情况