问题描述
因为模板列的个数不固定,所以想用代码生成模板列,大家有例子吗?
解决方案
解决方案二:
mark。不太会
解决方案三:
try没有测试//定义一个模板,TemplateFieldtmp=newTemplateField();//你可以给你定义的模板加控件TextBoxt1=newTextBox();t1.Text="小Q";tmp.ItemTemplate.InstantiateIn(t1);//吧模板列给gridviewthis.GridView1.Columns.Add(tmp);
解决方案四:
断点调试,并优化下,应该可以
解决方案五:
to:mqcan我也这样想的,但最后一句代码报了两个错误:错误1与“System.Web.UI.WebControls.DataControlFieldCollection.Add(System.Web.UI.WebControls.DataControlField)”最匹配的重载方法具有一些无效参数错误2参数“1”:无法从“System.Web.UI.WebControls.TemplateColumn”转换为“System.Web.UI.WebControls.DataControlField”
解决方案六:
哦,是我写错了,把TemplateField写成了TemplateColumn,哈哈,再调试中...
解决方案七:
我也试过,走不通。所以就mark一下,看看有没有大牛来解决或者来说明为什么这样不可以。
解决方案八:
这个例子不是我写的,往了从哪里转来的<%@PageLanguage="C#"%><%@ImportNamespace="System.Data"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><scriptrunat="server">ICollectionCreateDataSource(){DataTabledt=newDataTable();DataRowdr;dt.Columns.Add(newDataColumn("id",typeof(Int32)));dt.Columns.Add(newDataColumn("text",typeof(string)));for(inti=0;i<6;i++){dr=dt.NewRow();dr[0]=i;dr[1]="列表项目"+i.ToString();dt.Rows.Add(dr);}DataViewdv=newDataView(dt);returndv;}publicclassGridViewTemplate:ITemplate{privateDataControlRowTypetemplateType;privatestringcolumnName;publicGridViewTemplate(DataControlRowTypetype,stringcolname){templateType=type;columnName=colname;}publicvoidInstantiateIn(System.Web.UI.Controlcontainer){switch(templateType){caseDataControlRowType.Header:Literallc=newLiteral();lc.Text=columnName;container.Controls.Add(lc);break;caseDataControlRowType.DataRow:DropDownListdrr=newDropDownList();drr.ID="dropdown";drr.AppendDataBoundItems=true;drr.Items.Add(newListItem("-----请选择------",""));drr.Items.Add(newListItem("AA","a"));drr.Items.Add(newListItem("BB","b"));drr.Items.Add(newListItem("CC","c"));container.Controls.Add(drr);break;default:break;}}}protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){TemplateFieldcustomField=newTemplateField();customField.ShowHeader=true;customField.HeaderTemplate=newGridViewTemplate(DataControlRowType.Header,"动态添加列");customField.ItemTemplate=newGridViewTemplate(DataControlRowType.DataRow,"");GridView1.Columns.Add(customField);GridView1.DataSource=CreateDataSource();GridView1.DataBind();}}protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==DataControlRowType.DataRow){//可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。DataRowViewgv=(DataRowView)e.Row.DataItem;intitemSeleted=Int32.Parse(gv.Row["id"].ToString())>3?0:Int32.Parse(gv.Row["id"].ToString());DropDownListdr=(DropDownList)e.Row.FindControl("dropdown");dr.SelectedIndex=itemSeleted;}}</script><htmlxmlns="http://www.w3.org/1999/xhtml"><headid="Head1"runat="server"><title>GridView动态添加模板列的例子</title></head><body><formid="form1"runat="server"><asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"OnRowDataBound="GridView1_RowDataBound"><Columns><asp:BoundFieldHeaderText="标题"DataField="text"/></Columns></asp:GridView></form></body></html>
解决方案九:
现在的问题是,模板列如何绑定字段呢?
解决方案十:
悄悄地路过...你看不见我
解决方案十一:
因为模板列的个数不固定,所以想用代码生成模板列,大家有例子吗?============1.动态控件,对应用项目来说,是一项很吃力不讨好的工作,费时费力2.建议使用GridView.Columns[i].Visilbe来控制列的可见性现在的问题是,模板列如何绑定字段呢?============3.非得动态,所有的代码你都”手动”实现以高歌提供的为例(此DEMO应该来自孟子),比如我希望往模板列加入一个Label控件,那么需要如下代码,未经测试,主要绑定逻辑在控件的Databinding事件中完成publicvoidInstantiateIn(System.Web.UI.Controlcontainer){//....drr.Items.Add(newListItem("CC","c"));container.Controls.Add(drr);//添加LabelLabellbl=newLabel();lbl.DataBinding+=delegate(objectsender,System.EventArgse){//这里使用了匿名方法,as类型转换(senderasLabel).Text=DataBinder.Eval(((senderasControl).NamingContainerasGridViewRow).DataItem,"绑定的字段").ToString();}container.Controls.Add(lbl);break;//...}Hopehelpful~