利用RowDataBound改变gridview的列值

VS2019 C# winfrom DataGridView做的多行表头控件及实例源码 网友的blog提供了一个用户控件。 https://www.cnblogs.com/HopeGi/archive/2013/04/03/2982837.html 我整理了一下,有几点说明一下: 1、提供的是一个用户控件的源码,只需要把网友的源码回到项目中即可。 2、编译一下,这个控件就会出现在工具栏上,拖过来用就可以了 编译一下以后: 3、要在表格控件中,对模板列进行编辑好: 其中 的代码: HeaderItem item = this.boundGridView1.Heade. 阅读详情

需求是这样的,估计大家都会遇到这样的情况:

从数据库中所取得的值绑定在gridview中,有些值取出的是数值,而要把他变成文字。

比如说:

0 跟单员

1 为采购员

2 为审单员

3.为管理员

在gridview中,如果没有对值在业务层进行判断而直接绑定数据的话,就会出现值显示为数字,如图

 

 

大家可以看到在厂别及角色中所显示的都是数值,如何可以把他对应成我要的文字呢?


我首先在网上搜索了一下,大家都是采用了两种方法:

一种是:在数据库中做手脚,利用 Case..........When

CASE语句的两种格式:

语法格式为:
case <单值表达式>
       when <表达式值> then <SQL语句或者返回值>
       when <表达式值> then <SQL语句或者返回值>
       ...
       when <表达式值> then <SQL语句或者返回值>
       end

Example

SELECT
(CASE RoleValueID
        WHEN 01 THEN '跟单员'
        WHEN 02 THEN '采购员'
        WHEN 03 THEN '审核员'
        WHEN 04 THEN '管理员'
        ELSE '非人类动物'
END) AS RoleName
FROM UserRole


这种方法很常用,对程序也不会造成很大影响,可是如果在程序上的实体层所对应构造函数的数据类型不是字符类型的话(一般往往可能是int),那这里就会出现数据类型不对应的问题。

另一种方法:

使用gridview中的模板配合gridview中的相关事件

<asp:Button   ID= "Button2 "   runat= "server "   CommandArgument= ' <%#   Eval( "id ")   %> '   CommandName= "IsPass "   Text= ' <%#   Eval( "ispass ").ToString()   ==   "1 "   ?   "已审 "   :   "未审 "   %> '
  />   //指定CommandArgument值为id
  e.CommandArgument   就是获取当前点击按钮对应数据的ID
(此代码来自于
tp://topic.youkuaiyun.com/u/20070527/19/ae100b46-13d2-47af-8908-93d8ec91f263.html)

第三种方法还可以用javascript来获取,这个方法我不会


而我现在用的方法是在RowDataBound事件中作动作,大家都知这个事件很好使,可以在这里作一下gridview的样式改变等,现在我是这样使用它的:


        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            switch (e.Row.Cells[3].Text.Trim())
            {
                case "0":
                    e.Row.Cells[3].Text = "跟单员";
                    break;
                case "1":
                    e.Row.Cells[3].Text = "采购员";
                    break;
            }

            switch (e.Row.Cells[2].Text.Trim())
            {
                case "1":
                    e.Row.Cells[2].Text = "制造一厂";
                    break;
                case "2":
                    e.Row.Cells[2].Text = "制造二厂";
                    break;
            }
           

}

大家看一下对比一下结果:

运行后:

 

运行前:

 

这样就达到我想要的效果了,当然至于这个能不能运用于数据操作,我没试过(我这里只要表现层达到我想要的效果就可以了)

利用RowDataBound还可以改变gridview很多东西

1.实现字体颜色改变

前台用超链接列
<asp:HyperLinkField DataNavigateUrlFormatString="Detail.aspx" Text="点击查看">
</asp:HyperLinkField>

后台:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink hlf = (HyperLink)e.Row.Cells[1].Controls[0];
            if (Convert.ToDateTime(gridview1.DataKeys[e.Row.RowIndex].Value.ToString()) >  =   DateTime.Now)
            {
                hlf.ForeColor= System.Drawing.Color.Red;// change color
            }

        }
}

2.判断特定条件,更改单元格背景颜色

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    ...{    //数据加载时发生
        if (e.Row.RowType == DataControlRowType.DataRow)
        ...{    //判断是否是数据行
            if (e.Row.Cells[8].Text == "USA")
            ...{   //判断第9列值是否为"USA"
                //e.Row.BackColor = System.Drawing.Color.Red;
                e.Row.Cells[8].BackColor = System.Drawing.Color.Red;
            }
        }
    }

3.父窗体中调用子窗体的gridview

在父窗体中调用子窗体的gridview值(简单的页面交互):

父窗体代码:

注:单机事件用window.open打开新窗体并获得焦点<head>
<script language=javascript>...
    function openpage(htmlurl)
    ...{
        var newwin=window.open(htmlurl,"newWin","toolbar=no,location=no,directories=no,status=no,scrollbars=yes,menubar=no,resizable=yes,top=100,left=200,width=650,height=300");
        newwin.focus();
        return false;
    }
    </script>
</head>
<body>
<input type=text id="name" />
    在按钮中调用:
<input type=button value="调用" onclick="return openpage('GridViewClientClick.aspx');" />
</body>
子窗体代码:

注:girdview中e.Row.Attributes增加单击属性,ReKey并将此行第三列的值传过去    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    ...{
        if(e.Row.RowType==DataControlRowType.DataRow)
        ...{
            e.Row.Attributes.Add("ondblclick", "ReKey('" + e.Row.Cells[2].Text+"')");
            //e.Row.Attributes["style"] = "Cursor:hand";
            // //键盘事件
            //e.Row.Attributes.Add("OnKeyDown", "GridViewItemKeyDownEvent('" + e.Row.Cells[1].Text + "')");

        }

    }
(此代码来源于:http://blog.youkuaiyun.com/mingzhecode/archive/2007/10/08/1814546.aspx)


MSDN:
http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.rowdatabound(VS.80).aspx

一点小经验,记录一下,共同分享.

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/powerglover/archive/2009/05/05/4151315.aspx

GridView绑定时通过RowDataBound事件获取数据源列值 protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e) { //if (DataBinder.Eval(e.Row.NamingContainer, "DataRow.Readed").ToString() == "0") //if (gvData.DataKeys[e.Row.RowIndex][1 阅读详情

相关推荐

编辑GridView时如何控制列宽

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)    ...{        if (e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate) || e.Row.RowState ==

方明的专栏 3716

GridView行索引的应用

<br />asp.net服务控件的ID属性可用于在aspx的后台代码中检索控件,从而获得或编辑控件属性。<br />但有时候希望能在客户端对服务器控件进行样式,内容的控制,这要完成两部分的工作:<br />1 能在客户端对服务器控件进行唯一定位(JQuery,javascript控制)。<br />2 能实现服务器端ID到客户端ID的转换(对于MasterPage和GridView中的模版列会出现服务器控件ID和ClientID不一致)<br /> <br />对GridView要将每一行区分出来,可以通

yousuf007的专栏 862

datagridview 多维表头控件

datagridview 多维表头控件,可实现多层,很好用

gridView RowDataBound事件详解

//控件是是行         if (e.Row.RowType == DataControlRowType.DataRow)         {             //奇数和偶数行是编辑状态             if (e.Row.RowState == D

我的左脸像我的右脸 966

DataGridView多维表头的实现方法

背景 对于.NET 原本提供的DataGridView控件,制作成如下形式的表格是毫无压力的。 但是如果把表格改了一下,变成如下形式 传统的DataGridView就做不到了,如果扩展一下还是行的,有不少网友也扩展了DataGridView控件,不过有些也只能制作出二维的表头。或者使用第三方的控件,之前也用过DevExpress的BoundGridView。不过在没有可使用的第三方控件的情况下,做到下面的效果,就有点麻烦了。 那得自己扩展了,不过最后还是用了一个控件库的报表控件,Telerik的Reporting。不过我自己还是扩展了DataGridView,使之能制作出上面的报表。 准备

Logisim实战:手把手教你设计硬布线版MIPS CPU(多周期/8指令/附电路图)

本文是一份详细的Logisim实战指南,手把手教你设计一个采用硬布线控制的多周期MIPS CPU。文章深入剖析了硬布线控制与微程序控制的核心理念差异,并逐步讲解了从定义执行状态、构建状态跳转逻辑到生成控制信号、集成测试的完整流程,最终实现一个支持8条指令、可运行简单程序的处理器模型。

g9h0i1的博客 593

GridView 特定条件变色

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { for (int i = -1; i < GridView1.Rows.Count; i++) { string lbl = Convert....

dipan8982的博客 203

聚宽策略实盘新路径:不开通QMT , 小资金自动化交易解决方案

聚宽策略实盘新路径:不开通QMT , 小资金自动化交易解决方案

u011111246的博客 1470

GridView.RowDataBound 事件

.NET Framework 类库  GridView.RowDataBound 事件  注意:此事件在 .NET Framework 2.0 版中是新增的。 在 GridView 控件中将数据行绑定到数据时发生。 命名空间:System.Web.UI.WebControls程序集:System.Web(在 system.web.dll 中) var ExpCo

路雪军 Carl 4727

机器人学习-matlab四足机器人控制仿真

《机器人学,机器视觉与控制》学习笔记 使用工具箱版本9.10 题目与解决思路: 【1】. 通过减少复位期间的抬腿高度来缩短复位的轨迹 Z轴向下,为了减小复位器件的抬腿高度,应当缩小△Z,故可以将示例程序中zu值调大。 【2】. 增加腿的步幅 腿的步幅可由改变x方向上腿前进和后退运动的极限来达到,令xf = 7; xb = -xf;即可。 ...

weixin_44609769的博客 5540

Doris StreamLoad任务报错Connection reset

背景 Spark程序扫一张Hive表(大小3-7G),然后用http协议的streamLoad任务提交给Doris集群,在Doris集群从0.13.15升级到0.14.12后spark程序报错streamLoad时突然会Connection reset 分析 enable_http_server_v2 这个参数可以参考FE中文配置中查看到,作用是对于Doris界面是否开启新风格的界面,但是实际上他的作用远不止如此,请接着看 新老版本对于enable_http_server_v2参数默认值是不同的 在0.13

gaofeng的博客 3311

GridView中RowDataBound事件 获取列值的方法 .

GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行、列数据的途径。要获取当前行的某个数据列,有如下几种方法: 1. Cells[x].Txt。 从列单元格的文本值获取。这种方法简单高率,最为常用,但是功能单纯。此法存在几个缺点: (1)无法获取到设置了隐藏属性的数据列的值,所取到的值为“”(空)。 (2)只能...

weixin_30566111的博客 255

华硕笔记本+Ubuntu 20.04:用cpupower解决Intel CPU频率上不去/功耗墙问题实战

本文详细介绍了在华硕笔记本Ubuntu 20.04系统下使用cpupower工具解决Intel CPU频率受限和功耗墙问题的实战方法。通过禁用Intel P-State驱动、配置userspace模式以及高级调优技巧,帮助用户突破性能瓶颈,提升编译和计算效率。

weixin_42561476的博客 526

取gridview隐藏列值后,rowdatabound事件中转换字段失效问题。

郁闷了一个下午的问题: ' runat="server"> ' runat="server"> '>详细  如上一个Gridvie

shuishidoudou的专栏 788

视觉提示学习(Prompt Learning):CV领域的GPT时刻?

视觉提示学习(Prompt Learning):CV领域的GPT时刻? ,人工智能,计算机视觉,大模型,AI,在人工智能技术不断演进的今天,计算机视觉(Computer Vision,CV)作为人工智能领域的重要分支,始终致力于让机器 “看懂” 世界。从早期基于传统特征工程的图像识别方法,到深度学习时代卷积神经网络(Convolutional Neural Networks,CNN)的崛起,CV 领域经历了多次重大变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 86

在GridView的RowDataBound事件中获取某行某列的值!

在目前的工作中经常用到,特此记录,特别是那个 DataRowView ,经常是忘记怎么拼写的,嘿嘿 代码 // 判断订单状态填充“操作”列 protected void gdvOrders_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == ...

dituhe7184的博客 194

用 ABAP CDS 把树建起来:Hierarchy 的建模、调试与消费全流程

CDS Hierarchy 将树形数据结构作为一等公民引入 ABAP 开发,通过定义父子关联、根节点条件和兄弟排序规则,让数据库原生支持层级查询。相比传统递归处理方式,它能避免性能瓶颈,提供$node系统字段描述节点结构信息,并支持与SAP UI框架无缝集成。这种方法简化了组织架构、成本中心等业务场景的层级数据处理,使开发人员能够专注于业务逻辑而非底层实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

GridView中RowDataBound事件无法使用隐藏列的解决方法

在RowDataBound事件中,如果有使用的某列在前台或其他位置设置属性为隐藏。则在RowDataBound事件中找不到这个列。 所以如果要在RowDataBound中使用的列不要在其他位置设置其属性为隐藏。在这个事件中将其设置为隐藏即可。 以下代码中,cells[0]列为我要隐藏并且要在这个事件中使用的列  protected void G

烽火戏诸侯 1038

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Netcean
博客等级 码龄20年 16粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值