C#(.net)我要在一个GridView裏的根据数据表来动态生成一个或几个模板列,

模板列裏有三个控件:HyperLink1、Label1、Label2,这三个控件是竖直排列的。有人知道怎麼实现麼?模板列是由後台生成... 模板列裏有三个控件:HyperLink1、Label1、Label2,这三个控件是竖直排列的。
有人知道怎麼实现麼?
模板列是由後台生成
展开
 我来答
jakexiao123
2011-08-17 · TA获得超过972个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:141万
展开全部
可以实现,但是我告诉你。动态生成模板列是非常难取到数据的。我试过,就是取不到数据。
这是经过我改造后的样品,自己研究下。

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
///动态生成Template
/// </summary>
public class MyTemplate:ITemplate
{
private string strColumnName;
private DataControlRowType dcrtColumnType;
public MyTemplate()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 动态添加模版列
/// </summary>
/// <param name="strColumnName">列名</param>
/// <param name="dcrtColumnType">列的类型</param>
public MyTemplate(string strColumnName, DataControlRowType dcrtColumnType)
{
this.strColumnName = strColumnName;
this.dcrtColumnType = dcrtColumnType;
}
static int count1 = 0;
public void InstantiateIn(Control ctlContainer)
{

switch (dcrtColumnType)
{
case DataControlRowType.Header: //列标题
Literal ltr = new Literal();
ltr.Text = strColumnName;
ctlContainer.Controls.Add(ltr);
break;
case DataControlRowType.DataRow: //模版列内容——加载TextBox
TextBox tb = new TextBox();
tb.ID ="TextBox"+count1.ToString();
tb.EnableViewState = true;
tb.Width =35;
ctlContainer.Controls.Add(tb);

//Label lbl = new Label();
//lbl.ID = "Lable" + count1.ToString();
//ctlContainer.Controls.Add(tb);

count1++;
break;

}
}
/// <summary>
/// 绑定生成GridView
/// </summary>
/// <param name="gdv">要绑定的GridView</param>
/// <param name="dtblDataSource">GridView的数据源</param>
/// <param name="strDataKey">GridView的DataKeyNames</param>
public static void GridViewBind(GridView gdv, DataSet dtblDataSource)
{
//gdv.Columns.Clear();
gdv.AutoGenerateColumns = false;
gdv.DataSource = dtblDataSource;
int count=dtblDataSource.Tables[0].Columns.Count;
//gdv.DataKeyNames = new string[]{ strDataKey };
TemplateField[] tfColumn = new TemplateField[count];
for (int i = 0; i <count; i++)
{
tfColumn[i] = new TemplateField();
tfColumn[i].ItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
tfColumn[i].HeaderTemplate = new MyTemplate(dtblDataSource.Tables[0].Columns[i].ToString(), DataControlRowType.Header);
tfColumn[i].EditItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
gdv.Columns.Add(tfColumn[i]);
//if (i==count - 1)
//{
// TemplateField t = new TemplateField();
// t.ItemTemplate = new MyTemplate("", DataControlRowType.DataRow);
// t.HeaderTemplate = new MyTemplate("保存", DataControlRowType.Header);
// gdv.Columns.Add(t);
//}
}
gdv.DataBind();
}

}
longww0513
2011-08-17 · TA获得超过151个赞
知道答主
回答量:219
采纳率:0%
帮助的人:160万
展开全部
Gridview 点开它的属性 然后又个ROW 可以在里面设置
追问
模板列是由後臺生成
追答
如果你的意思是后台绑定到前台   这3个控件都不需要用   GRIDVIEW 自身展示的就是LABEL  你的HyperLink  完全可以通过你点击某一行来获取它的e.rowindex 来触发你超文本事件
直接datasoruce =xxxx;然后databind就好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xueyv_xs
2011-08-17 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:102万
展开全部
祝你好运。这个研究了下,好像有点困难,还在研究中,成功了告诉你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w506044
2011-08-17 · 超过21用户采纳过TA的回答
知道答主
回答量:95
采纳率:0%
帮助的人:53万
展开全部
每一个控件后面加一个<br/>试试
更多追问追答
追问
模板列是由後臺生成
追答
模板里控件也是后台生成?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式