这几天工作中碰到一个问题,将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)中定义一个ItemTemplate来实现。在ASP.NET的ASPX代码中,可以看到以下模板字段的设置: ```asp <asp:TemplateField> 全选();" type="checkbox"> ...
key={0}") %>'` 表示根据数据源中的`SomeKey`字段值构造超链接的URL,其中"{0}"是一个格式化占位符,被`SomeKey`的值替换。`Text='("SomeValue") %>'`则设置超链接文本为`SomeValue`字段的值。 接下来,我们需要...
通过在TemplateField中嵌套其他的GridView或者使用其他HTML元素,可以构造出多层次的表头。 3. **CSS样式**: 使用CSS可以实现固定表头,即使在滚动表格内容时,表头始终保持可见。通过设置CSS样式如`position: ...
- `RowDeleting`事件处理删除操作,通过获取`DataKeys`中的行ID来构造删除SQL语句,执行删除操作后刷新数据。 - `RowUpdating`事件用于更新操作,获取用户输入的新值,执行更新SQL,然后关闭连接并重新绑定数据。 ...
在创建多层列表头时,我们可能需要使用嵌套的`GridView`或`Table`控件,或者使用`TemplateField`结合`HtmlGenericControl`来构造复杂的头部结构。例如: ```csharp // 添加第一层列 GridViewColumn col1 = new ...
- 在后台代码中,根据用户输入的条件构造SQL查询语句,重新绑定数据到GridView。 7. 界面优化: - 使用CSS样式调整GridView的外观,使其更符合UI设计要求。 - 可以通过设置GridView的GridLines属性为None,去掉...
ASP.NET中的`<asp:HyperLinkField>`或`<asp:TemplateField>`可以用来创建带有参数的超链接。在运行时,这些链接会根据数据绑定的值动态生成。 这些代码片段对于ASP.NET初学者来说是非常实用的学习资源,它们涉及到...
如果选中,就根据`DataKeys[i].Value`获取特定记录的主键值,构造SQL删除语句执行删除操作。 3. GridView正反双向排序: 默认情况下,GridView的排序是单向的,即只能升序或降序。要实现正反双向排序,可以自定义...
`<asp:TemplateField>`允许自定义列的显示方式。`<ItemTemplate>`标签内的代码`<%# Container.DataItemIndex +1 %>`会计算当前行的索引(从0开始)并加1,以显示1开始的序列号。 2. **批量删除列模板列代码**: 这...
在`GridView1_RowDeleting`方法中,通过`e.RowIndex`获取要删除的行的索引,然后找到需要的字段(这里用`Label2`来获取关键字`cname`),构造SQL删除语句,执行删除操作(例如使用`Class1.sqlcomd(sql)`执行)。...
如果需要自定义列显示,可以通过TemplateField或BoundField来指定列的类型和数据绑定表达式。 2. 在后台代码中,创建数据库连接并执行查询操作,获取数据源。例如,使用SqlConnection和SqlCommand对象来连接数据库...
这里,`Eval("personName")`将从数据源中获取用户名,然后构造指向`ImageHandler`的URL。 5. **GridView显示读出的二进制图片** 如果不使用URL方式,你可以在RowDataBound事件中动态设置Image控件的`ImageUrl`,...
11.2.7 使用TemplateField 363 11.3 GridView控件的事件 365 11.3.1 突出显示GridView行 366 11.3.2 显示列汇总 368 11.3.3 显示嵌套的主从表单 369 11.4 扩展GridView控件 371 11.4.1 创建长文本字段 371 11.4.2 ...
在列的定义中,我们特别添加了一个模板列(TemplateField),用于显示一个复选框(CheckBox),这样用户就可以选择他们想要删除的条目。此外,还添加了一个命令列(CommandField),显示一个删除按钮,以便用户可以...