急~~,关于动态添加gridview列的问题,救命
江川GG 2009-03-24 09:13:01 我定义了一个GridViewTemplate类,GridViewTemplate.cs如下:
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
private Control columnControl;
private string dataField;
private string ControlType;
public GridViewTemplate(DataControlRowType type, string colname)
{
templateType = type;
columnName = colname;
columnControl = null;
ControlType = "";
}
public GridViewTemplate(DataControlRowType type, string colname, Control ctr,string strControlType)
{
templateType = type;
columnName = colname;
columnControl = ctr;
ControlType = strControlType;
}
public GridViewTemplate(DataControlRowType type, string colname, string datafield, Control ctr)
{
templateType = type;
columnName = colname;
columnControl = ctr;
dataField = datafield;
}
public GridViewTemplate(DataControlRowType type, string colname, string datafield)
{
templateType = type;
columnName = colname;
columnControl = null;
dataField = datafield;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
if (columnControl != null)
{
switch (ControlType)
{
case "LinkButton":
container.Controls.Add(lb);
break;
//case "LinkButton": container.Controls.Add(columnControl); break;
default:
break;
}
}
else
{
Literal lcnoctr = new Literal();
lcnoctr.Text = columnName;
if (dataField != "" && dataField != null)
{
lcnoctr.DataBinding += new EventHandler(tb_DataBinding);
}
container.Controls.Add(lcnoctr);
}
break;
default:
break;
}
}
=============================================================
然后我在另外一个页面index.aspx.cs里面调用这个类去产生新的列:
TemplateField mycustomField = new TemplateField(); //创建列实例
mycustomField.ShowHeader = true; // 设置属性
LinkButton lb = new LinkButton();
lb.Text = "生成告知函";
lb.ID = "lbAlertLetter";
lb.Click += new EventHandler(lbAlertLetter_Click);
mycustomField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "<span>Title</span>");
mycustomField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "", lb, "LinkButton");
dv.Columns.Add(mycustomField);
现在就有一个问题了,这样添加进去之后,新添加的列只有最后一个才有linkbutton,我想了下应该是这个new LinkButton在外面实例化了一次造成的,但是如果在GridViewTemplate.cs里面实例化LinkButton,例如(替换红色部分)
case "LinkButton":
LinkButton lb = new LinkButton;
lb.text = "生成告知函";
container.Controls.Add(lb);
break;
那如何去响应外面index.aspx.cs页面里的
lbAlertLetter_Click事件呢?