这几天工作中碰到一个问题,将GridView列表以Excel形式导出。
但是我们构造GridView列表的时候,遇到长的内容字符串,一般都会用一个字符串方法截断一下,这样用Excel导出的内容,就不是客户希望的全部内容了。例如:“我们的内容” 被截断后得到 “我们的...”。
那么希望在导出Excel前替换掉这个列,换成全文显示的绑定列。
一般的BoundField的绑定方法请参看我博客的文章“GridView动态绑定列”。
本文只涉及TemplateField的构造方法,而且只针对前台页面为 下面代码样式的情况
<asp:TemplateField HeaderText="地址" SortExpression="Address">
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Eval("NC_cruisePersonInfo.Address") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
完成此效果分为两步:
1. 先构造一个自定义的TemplateField类
public class MyTemplate : ITemplate
{
//设定列的绑定字符串
protected string bindColname;
public MyTemplate(){}
public MyTemplate(string bindCname)
{
//通过构造函数得到此绑定字符串
bindColname = bindCname;
}
//初始化函数,类初始化时候自动调用
public void InstantiateIn(System.Web.UI.Control container)
{
//构造一个lable
Label lblDisplay = new Label();
//添加此lable的绑定方法
lblDisplay.DataBinding += new EventHandler(this.Lable_DataBinding);
//将此lable加到TemplateField容器中
container.Controls.Add(lblDisplay);
}
//lable绑定方法
private void Lable_DataBinding(Object sender, EventArgs e)
{
//得到要绑定的lable
Label l = (Label)sender;
GridViewRow row = (GridViewRow)l.NamingContainer;
//这句最重要---此列的行绑定形式为Eval,绑定内容为bindColname
l.Text = DataBinder.Eval(row.DataItem, bindColname).ToString();
}
}
2. 页面后台文件中绑定至GridView
TemplateField remarkField = new TemplateField();
//构造自定义的TemplateField类对象
MyTemplate t2 = new MyTemplate("NC_cruisePersonInfo.Address");
//设定列标题
addressField.HeaderText = "地址";
//将此Template加入到TemplateField中
addressField.ItemTemplate = t2;
//插入到GridView的列中
gvCruisePerson.Columns.Insert(8,addressField);
经由这两步,就动态的为GridView绑定了一个TemplateField 得列,此列的内容表达为 NC_cruisePersonInfo.Address ,其中NC_cruisePersonInfo是GridView对象数据源,实体对象的一个“类”属性。
分享到:
相关推荐
在GridView控件中使用TemplateField在ASP.NET_2.0中操作数据.在GridView控件中使用TemplateField在ASP.NET_2.0中操作数据.在GridView控件中使用TemplateField在ASP.NET_2.0中操作数据.在GridView控件中使用...
很著名的老外写的在GridView控件中使用TemplateField的教程。个人排了下版但是代码部分说的不是太清晰。大家看看,不错的
GridView 由一组字段组成,这些 字段指出了应将来自 DataSource 的哪些属性呈现在输出中,以及数据以哪种方式呈现。 BoundField 是最简单的字段类型,它以文本的形式显示数据值。...例如,CheckBoxField 呈现为一个复选...
在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField(源码)
在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField
本文主要讲解在GridView控件中如何使用TemplateField,从而更加高级的自定义GridView,实现自定义列表的功能。
就像在GridView中那样,DetailsView控件也可以同样的使用TemplateField。本文用两个TemplateField来演示在它的使用方法。
在ASP.NET 2.0中操作数据:在DetailsView控件中使用TemplateField
在ASP.NET 2.0中操作数据:在DetailsView控件中使用TemplateField(源码)
在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")
知识准备 模 板 名 说 明 ItemTemplate 用于显示数据绑定控件的TemplateField中的一项 AlternatingItemTemplate 用于显示TemplateField的替换项 EditItemTemplate 用于显示编辑模式下的TemplateField项 ...
知识准备 模 板 名 说 明 ItemTemplate 用于显示数据绑定控件的TemplateField中的一项 AlternatingItemTemplate 用于显示TemplateField的替换项 EditItemTemplate 用于显示编辑模式下的TemplateField项 Ins
如果使用的是 TemplateField 对象并且必须在事件处理程序方法中访问行索引,则将按钮的 CommandArgument 属性设置为标识当前行的表达式。 下面的示例演示如何将 TemplateField 列中某个按钮的 CommandArgument 属性...
GridView 只需要展示则BoundField ItemTemplate则可以在行里面展示任何控件 ...<asp:TemplateField HeaderText="小类名"> ;Container.DataItem, "subclass_name") %>' /> </asp:TemplateField>
<asp:TemplateField HeaderText="中港交仓POD"> ~/Images/goback.gif" ToolTip="下载" Visible='(DataBinder.Eval(Container, "DataItem.ISHKPOD")) %>' /> </asp:TemplateField> /// /// 文件...
而如果想生成其它更加复杂的数据行,可以使用TemplateField模板。TemplateField模板内部又包含很多子模板,可以插入任意HTML代码和服务器端控件,从而实现非常复杂的数据显示和用户操作; 可以对SqlDataSource控件的...
<asp:TemplateField HeaderText="员工性别"> ()%>' DataValueField="员工性别" DataTextField="员工性别"> </asp:TemplateField> 家庭住址" HeaderText="家庭住址" SortExpression="家庭住址"/>