如何用代码生成模板列?

问题描述

因为模板列的个数不固定,所以想用代码生成模板列,大家有例子吗?

解决方案

解决方案二:
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~

时间: 2024-10-31 02:03:37

如何用代码生成模板列?的相关文章

ASP.NET 2.0 中动态添加 GridView 模板列

动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. C#代码 <%...@ Page Language="C#" %><%...@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http

ASP.NET 2.0 中动态添加 GridView 模板列的例子

asp.net|动态|模板 动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. C#代码 <%...@ Page Language="C#" %><%...@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu

DataGrid动态添加模板列的一个例子

datagrid|动态|模板 数据源结构同http://blog.csdn.net/lovecherry/archive/2005/03/24/328455.aspx表dep:depid(标识主键),depname(学院名字)表stu:stuid(标识主键),stuname(学生名字),studepid(学院id=表dep.depid) 前台:<%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoE

动态模板列更新数据分页的例子

动态|分页|模板|数据 在上次给出了动态模板列的一个例子,网友问我更新操作和分页怎么做,下面给出代码. 前台:<%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm30" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML

RadioButtonList在Datagrid模板列中的应用

datagrid|模板 1.RadioButtonList插入DataGrid模板列的方法与其他控件插入的方法一致. 2.从数据库中读取RadioButtonList状态的方法 1) .aspx文件 <asp:RadioButtonList .... SelectedIndex='<%# Container.DataItem("strRBL") %>'> 2) .vb文件 objDataSet.Tables(0).Columns.Add("strRBL

批量获取DataGrid控件模板列中的数据

datagrid|datagrid控件|模板|数据 批量获取DataGrid控件模板列中的数据 在DataGrid中一般只能单个获取每一行的数据,若要批量获取DataGrid控件中的数据必须对每一个模板列的控件进行扫描,获取其中的数据.我本想做的程序是根据不同的行数,由用户一次输入若干数据,提交后系统自动获取批量数据的程序.以下程序简单表达了需要实现的功能 test.aspx .......... <asp:DataGrid id="dgResult" runat="s

嵌套的DataGrid如何为子DataGrid动态增加模板列

datagrid|动态|模板 例子比较简单,直接贴代码了,例子达到以下功能: (1)两个DataGrid嵌套 (2)外面一个DataGrid分页 (3)里面一个DataGrid动态增加模板列  <%@ Page language="c#" Codebehind="WebForm45.aspx.cs" AutoEventWireup="false" Inherits="csdn2.WebForm45" %> <

Ext 2.0如何给GridPanel加上ASPX --- GridView一样的模板列

我做的是一个添加删除按钮的例子,先看一下效果. 代码: 代码操作数据库那部分没有写,在下面的代码有标明. 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<html xmlns="http://www.w3.org/1999/xhtml&qu

ASP.NET GirdView学习之六 使用模板列实现多行删除

1using System; 2using System.Data; 3using System.Configuration; 4using System.Collections; 5using System.Web; 6using System.Web.Security; 7using System.Web.UI; 8using System.Web.UI.WebControls; 9using System.Web.UI.WebControls.WebParts;10using System