
这是经过我改造后的样品,自己研究下。
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 = 0i <counti++)
{
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()
}
}
数据库中保存图片的路径(../image/1.jpg)赋值给图片模板中的图片控件。在保存图片路径的时候就将图片存放的文件夹及其图片名称都保存,这样再提取图片路径的时候就可以跟一般控件赋值一样了。你参考下这篇我的回答,差不多的http://zhidao.baidu.com/question/152928463.html#here
前端用JS,
function GetGridViewId()//获取Gridview的ID
{
var id
var tb = document.getElementsByTagName("table")
for(var i=0i<tb.lengthi++)
{
if(tb[i].id.indexOf("GridView1")!=-1)
{
id = tb[i].id
break
}
}
return id
}
window.onload=function()
{
var tb = document.getElementById(GetGridViewId())//获取Table
for(var i=0i<tb.rows.lengthi++)//循环Table每一行
{
if(tb.rows[i].cells.length<=1)
{
break//防止分页出现tb.rows[i].cells[1]为空情况
}
var clonetd = tb.rows[i].cells[1].cloneNode(true)//克隆第二列(模板列),即预测值那列
var newtd = tb.rows[i].insertCell()//插入一个新列
newtd.replaceNode(clonetd)//把新列用克隆的第二列置换掉
tb.rows[i].cells[1].style.display="none"//隐藏第二列,即预测值那列
}
}
<asp:GridView ID="GridView1" runat="server" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnForecast" runat="server" Text="单件预测" CommandName="Forecast" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="预测值">
<ItemTemplate>
<asp:TextBox ID="txtForecastValue" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后端你GridView绑定数据源,我就不写了.
这样就可以实现你的功能了,第一列为模板列,然后是自动生成列,最后还是一个模板列
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)