Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法。

DataGrid 自定义字段内容 因为DataGrid Web 控件的AutoGenerateColumn 属性预设为True,表示会自动产生数据源中所有的字段。如果我们想自订DataGrid Web 控制所要显示的字段,只要将AutoGenerateColumn属性设为False,并设定Columns 属性即可。其设定语法如下所示: 样版设定... DataGrid Web 控件允许我们定义的字段,如下表所示: 字段型态 阅读详情
最近写了几个asp.net的项目。其中,Asp.Net的控件DataGrid使用的最多了,前几天需要一个功能,我研究了很长时间,发现一个方法,应该是最简单的实现。现表述如下。

DataGrid的html定义很简单,如下
<Asp:DataGrid ID="myDatagrid" runat="server" datakeyfield="fID" AutoGenerateColumns="False">
  
<Columns>
    
<Asp:TemplateColumn itemstyle-width=".." ..>
        
<ItemTemplate>
            .
        
</ItemTemplate>
    
</Asp:TemplateColumn>
  
</Columns>
</Asp:DataGrid>

功能的要求是在 ItemTemplate中,有可能是一个绑定数据源的:
<a href="...">...</a>
链接代码,也有可能是一个
<span>...</span>
显示文本代码,而判断的根据是绑定到DataGrid中数据源的DataTable中每行的某一特定列的内容。

说白了,功能就是DataGrid在绑定数据生成行的时候,判断数据源DataTable每行DataRow中一个字段的内容,这个字段类型是bool类型,如果为true,则这个列显示的是<a href="...">...</a>链接,而如果是false,则显示<span>...</span>文本。而显示的链接内指向的地址必须执行数据绑定。就是这个DataGrid的列有的行要数据绑定,有的行不要数据绑定。

功能需求分析到这里,那么现在该思考如何实现了。

我当时了解需求后,马上反应出来,使用DataGrid自带的BoundColumn、HyperLinkColumn肯定是不行的。而且,使用TemplateColumn也有麻烦。他只能放一些固定的控件,如html控件或服务器控件等。后来我没有办法了,准备继承ITemplate接口自己开发一个模版列。后来又觉得麻烦。因为绑定的时候需要一个类似于BoundColumn功能的绑定数据源内容的东西。后来我发现了这个方法。

在查看.Net Framework SDK 文档的时候,我发现在<Asp:TemplateColumn>中的<ItemTemplate>中可以放类似于
<%# DataBinder.Eval(Container.DataItem, "fID") %>
这样的数据绑定代码,我就想是否可以再加入代码呢

我做了一个试验,试验结果发现上面的代码(包括前面和后面的<% %>符号)输出的实际上是一个object对象,然后DataGrid显示的时候把它转换成字符串。后来我就想,是否可以前面再加入代码,调用这个页面的后台代码中的方法。

我们都知道,在asp.net1.1中,一个名称为aaa.aspx的asp.net页在asp.net内部处理时是一个名叫ASP.aaa_aspx的类,这个类继承它的后台代码aaa.aspx.cs中的类,这个类继承System.Web.UI.Page类,从而实现需要的功能。这就是说,在asp.net 1.1中,我们在.aspx中的以<% %> 包含的代码可以调用后台cs类中的以public 和protected生命的任何方法。

这就好办了,既然从上面的数据绑定代码可以获取主键内容(是个字符串),那么我可以在后台写一个方法,这个方法有一个字符串参数,返回的也是字符串。这个返回的字符串就是显示在列中的内容。

首先说一下绑定表的内容,如下
列名 类型 用途
fID System.String 表主键
hasSub System.Boolean 判断的依据
contentUrl System.String 链接的地址

然后是后台代码中C#代码
protected string GetDGColumn(string id)
{
    
// 从数据源获取DataTable内容略
    DataTable dt = .;
    
// 定义DataTable的主键列
    DataColumn[] key = {dt.Columns["fID"]};
    dt.PrimaryKey 
= key;

    
// 根据传入的id开始找数据行
    DataRow row = dt.Rows.Find(id);

    
// 找到后开始判断
    if((bool)row["hasSub"])
    
{
        
// hasSub为 true,表示返回<span>
        return "<span style=/"/">内容内容</span>";
    }

    
else
    
{
        
// hasSub列为false,返回链接
        return "<a href=/"XXXX.aspx?id="+id+"/" target=/"_blank/">链接内容</a>";
    }

}

然后在.aspx中的DaaGrid内这样定义:
<Asp:DataGrid ID="myDatagrid" runat="server" datakeyfield="fID" AutoGenerateColumns="False"> 
  
<Columns> 
    
<Asp:TemplateColumn itemstyle-width=".." ..> 
        
<ItemTemplate> 
            
<%# base.GetDGColumn((object)DataBinder.Eval(Container.DataItem, "fID")) %>
        
</ItemTemplate> 
    
</Asp:TemplateColumn> 
  
</Columns> 
</Asp:DataGrid>

利用了DataGrid绑定时内部使用的数据绑定方法获取结果,然后把结果传递给GetDGColumn()方法,DataGrid列的内容实际上是使用的这个方法返回的字符串。


好了,一个随心所欲生成DataGrid列内容的方法说完了,不知道大家有没有更好的方法。
我这个方法的缺点就是生成的内容没有办法执行服务器提交,它无法被服务器段区分开,所以只能是使用静态的链接,文本等。还有就是可以调用客户端的js脚本。如果谁有更好的方法,如生成的链接按钮的单击事件可以被服务器端区分,请指教。如果大家有更好的方法,也请指教。我在这里谢谢大家了。
DataGridSkin 皮肤类 对spark DataGrid写的皮肤类。主要就是对于datagrid 的column 的label 写皮肤,可以居中显示。 立即下载

相关推荐

STM32读取BQ40Z50的数据

TI电池管理芯片BQ40Z50,通信协议是SMBUS,类似IIC,速率要求10-100KHz   用的STM32F103的硬件IIC读取电池的各种数值,源代码如下: ​ #include "iic.h" #include "stdio.h"  //***************************************************** // IIC2初始化函数:初始化ST...

百步登峰的博客 1万+

WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)

因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件 大致功能是获得一个字符串 和一组颜色值 最后田字格会显示不同颜色 这篇主要讲 DataGridTemplateColumn 并实现重写Datatemplate 重点注释 单独列出来了 LS 是列数据对象集合 listName是行数据对象集合 var Item = n...

时意 1万+

深度学习二分类实战:用Python+Keras搞定基因表达数据预测(附完整代码)

本文详细介绍了如何使用Python和Keras构建深度学习模型进行基因表达数据的二分类预测。通过数据预处理、特征选择、神经网络构建及优化策略,特别针对小样本场景提供了调参技巧和模型解释方法。文章还包含完整的代码示例,帮助读者快速掌握深度学习在生物信息学中的应用。

weixin_30642561的博客 246

DataGridTemplateColumn和DataGridTextColumn是WPF中用于在DataGrid控件中定义列的两种不同方式

则适合于需要定制化布局和交互的情况。适合于简单的文本数据显示,而。

m0_59115955的博客 1840

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 540

Jenkins插件下载慢?3分钟搞定国内镜像加速(含华为/腾讯/清华源对比)

本文详细介绍了如何通过国内镜像源加速Jenkins插件下载,包括华为云、腾讯云和清华源等主流镜像站的性能对比及一键配置方案。通过实测数据展示华为云镜像站表现最佳,下载速度达19.4MB/s,并提供sed命令、管理界面配置和Docker定制三种高效加速方案,帮助开发者快速解决插件下载慢的问题。

sql99的博客 324

DataGrid DataGridTemplateColumn

设置单元格的样式 <DataGrid.Columns> <DataGridTextColumn Header="检测项目" Binding="{Binding ItemName}" Width="*" /> <DataGridTemplateColumn Header="详细" Width="80" > <Dat...

weixin_33752045的博客 511

【可穿戴算法开发】-PPG信号检测方法

文章目录一、PPG(光电容积脉搏波法)信号的检测原理二.PPG技术目前存在的问题(挑战)三. **心电信号产生的原理** 随着经济的发展,在人们生活水平提高的同时,高脂肪摄入和低运动量成为了人们普遍的生活模式,近年来高血压、高血脂已经发展为危险性最高的病症。心电、血压、血氧等生理参数是预防和分析心血管疾病的重要生理参数。 常用的心电测量仪器有:多导ECG心电图仪、PPG心率检测器、心率带等; 常...

wxq_1993的博客 2万+

DataGridTemplateColumn

DataGridTemplateColumn自定义单元格样式 <DataGrid Grid.Row="0" Name="BasicRuleDataGrid" PreviewMouseWheel="BasicRuleDataGrid_OnPreviewMouseWheel" VerticalScrollBarV...

weixin_34007879的博客 914

VSAN数据救援实战:当26个虚拟机突然不可访问时我们做了什么?

本文深度复盘了一次由运维操作失误引发的VMware vSAN存储危机,导致26个虚拟机数据不可访问的实战救援过程。文章详细剖析了vSAN脑裂状态的诊断方法,分享了在官方支持受限时,如何结合社区智慧与自主分析,通过精准的底层命令干预和状态推理,最终成功恢复全部数据的破局思路与操作细节,为vSAN数据救援提供了宝贵经验。

weixin_35749786的博客 239

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6989

Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法。 选择自 TomMax 的 Blog

最近写了几个asp.net的项目。其中,Asp.Net的控件DataGrid使用的最多了,前几天需要一个功能,我研究了很长时间,发现一个方法,应该是最简单的实现。现表述如下。 DataGrid的html定义很简单,如下 Asp:DataGrid ID="myDatagrid" runat="server" datakeyfield="fID" AutoGenerateColumns="Fa

异道的专栏 1547

企业级OpenClaw部署实战:10个关键配置让你从“养虾“到“精通“

OpenClaw(社区昵称"小龙虾")作为2026年开源社区最活跃的AI Agent项目,凭借其多Agent协同架构和企业级安全隔离能力,已成为中大型企业的首选AI基础设施。本文基于真实企业部署经验,系统梳理了企业级OpenClaw部署的10个关键配置:用户ID消息隔离、群组ID消息隔离、多机器人配置、无限量Agent创建、机器人与Agent关联、Agent间调度、权限配置、Hooks任务、多模型切换及一键备份迁移。

program哲学 931

Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法。 选择自 TomMax 的 Blog

最近写了几个asp.net的项目。其中,Asp.Net的控件DataGrid使用的最多了,前几天需要一个功能,我研究了很长时间,发现一个方法,应该是最简单的实现。现表述如下。 DataGrid的html定义很简单,如下 Asp:DataGrid ID="myDatagrid" runat="server" datakeyfield="fID" AutoGenerateColumns="Fa

613

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法

Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法。  最近写了几个ASP.net的项目。其中,ASP.Net的控件DataGrid使用的最多了,前几天需要一个功能,我研究了很长时间,发现一个方法,应该是最简单的实现。现表述如下。 DataGrid的HTML定义很简单,如下 . 功能的要求是在 ItemTemplate中,有可能是一个绑定数据源

月落星沉 998

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Asp.Net中DataGrid的模版列(TemplateColumn)内容控制简单方法。 选择自 TomMax 的 Blog 选择自 web_gus 的 Blog

最近写了几个asp.net的项目。其中,Asp.Net的控件DataGrid使用的最多了,前几天需要一个功能,我研究了很长时间,发现一个方法,应该是最简单的实现。现表述如下。 DataGrid的html定义很简单,如下 Asp:DataGrid ID="myDatagrid" runat="server" datakeyfield="fID" AutoGenerateColumns="Fa

yeke888的专栏 671

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ASP.NET中使用DataGrid显示数据

 版本:.NET Framework 1.1 DataGrid是ASP.NET中用于显示table类型数据的一个功能强大的控件,使用DataGrid控件可以轻松实现数据的分页显示及修改,并且拥有多种显示风格。本文主要简述DataGrid的使用方法,希望可以起到抛砖引玉的作用。 一常用属性   DataSource    使用 DataSource 属性指定要绑定到数据列

colin的专栏 5717

ASP.NET Datagrid创建自定义列

  简介  不得不承认,为 Microsoft? ASP.NET 编写 Datagrid 代码包括大量的重复工作。尽管我深受该控件的困扰,但我还是不断寻找简化这类任务的捷径。谁都不愿意做重复的工作,对不对?为了摆脱这种烦人的工作,我们要将多个项目中的重复代码封装到一个可重复使用的程序包中。这才是面向对象的编程工作所要解决的问题,使用 Datagrid 也不例外。对于 Datagrid 控件来说,要

The key to .Net 491

为 ASP.NET Datagrid 创建自定义列

Marcie RobillardDatagridGirl.com 2003 年 9 月简介不得不承认,为 Microsoft® ASP.NET 编写 Datagrid 代码包括大量的重复工作。尽管我深受该控件的困扰,但我还是不断寻找简化这类任务的捷径。谁都不愿意做重复的工作,对不对?为了摆脱这种烦人的工作,我们要将多个项目中的重复代码封装到一个可重复使用的程序包中。这才是面向对象的编程

深度Java 3077

.NET中DataGrid的使用(二)DataGrid的屬性和方法

作者:小木 怎麽講了半天還沒有提到DataGrid自己的屬性?別急別急,講完common的這就來了阿...厄,讓我先比較一下^^b DataGrid在aspx文檔里應該怎樣去定義呢?當然你可以在AutoGenerateColulmns為True的情況下,給他數據庫查詢結果的對象作爲數據源,這時候它可以自行判斷列名和内容,並向標題行添加列名。你只要定義DataSource然後DataBind()

地球人的blog 1244

为 ASP.NET Datagrid创建自定义列

Marcie RobillardDatagridGirl.com2003 年 9 月摘要:ASP.NET Datagrid 是 Web 开发人员可以使用的一个功能强大的控件。通过添加自定义列以便为用户更准确地显示数据,来学习如何增强该控件的功能。(本文包含一些指向英文站点的链接。)适用于:    Microsoft® ASP.NET下载本文的源代码。(请注意,在示例文件中,程序员的

ayun00的专栏 985

datagrid的自定义和隐藏栏

                   AutoPostback="True" /> Visible                       AutoPostback="True" /> Hidden         AutoGenerateColumns="False"   //注意这儿       CellPadding="5"       GridLines="None"  

AllenTing的专栏 1755
上一篇: 学了一段时间的Asp.Net 2.0后,心里一些想法
TomMax
博客等级 码龄25年 6粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值