请教,怎样给动态生成的模板列绑定数据,谢谢!!!!!
我的程序如下:
//根据数据表项目的记录动太生成GridView的列
private void CreateGridviewColumns()
{
gvUnderGraduateList.Columns.Clear();
foreach (DataRow dr in dsProject.Tables[0].Rows)
{
TemplateField tf = new TemplateField();
tf.ShowHeader = true;
tf.HeaderText = dr[2].ToString();
tf.ItemStyle.HorizontalAlign = HorizontalAlign.Right;
tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, dr[2].ToString(), (800 / dsProject.Tables[0].Rows.Count));
gvUnderGraduateList.Columns.Add(tf);
}
gvUnderGraduateList.DataBind();
}
//模板类
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
private int tbWidth;
public GridViewTemplate(DataControlRowType type, string colname,int pWidth)
{
templateType = type;
columnName = colname;
tbWidth = pWidth;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.ID = columnName;
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
TextBox tb = new TextBox();
tb.ID = columnName.ToString();
tb.AutoPostBack = false;
tb.Width = tbWidth;
tb.BorderStyle = BorderStyle.Groove;
tb.DataBinding += new EventHandler(this.tbxCols_DataBinding);
container.Controls.Add(tb);
break;
default:
break;
}
}
//数据绑定,参照坛子上一个贴子写了一下,这里我不知道该怎么写了,不知怎样得到绑定字段的名称(因为字段是动态传进来的)
//或者有没有别的方法来进行数据绑定,谢谢!!!!!
private void tbxCols_DataBinding(Object sender, EventArgs e)
{
TextBox tbx = (TextBox)sender;
//取得GridViewRow(包含TextBox控件)
//GridViewRow gvRow = (GridViewRow)gvUnderGraduateList.NamingContainer;
//进行数据绑定
//tbx.Text = DataBinder.Eval(gvRow.DataItem, " ").ToString();
}
请各位大侠赐教,谢谢!!!!!!!!
[解决办法]
既然是动态生的,怎么生的列就怎么赋值呗.
你生成的时候是foreach循环, 绑定的时候就在RowDataBound的时候再foreach一下吧.模板列只能这样来了.对你的技术实现方案合理性表示怀疑.
动态生成的也可以FindControl()得到引用,然后赋值.
其实你在生成列的时候就应该知道它对应的是什么字段,在那个时候就设置好不就行了(就是不用TemplateField的意思,这里不需要用模板列呀 )?
[解决办法]
http://dotnet.aspx.cc/article/b131bf6e-b35b-413c-9dce-e755242fa795/read.aspx
[解决办法]
GridView可以设置AutoGenerate属性为true,就自动根据数据(例如DataSet)来生成列,根本不用你管。