利用RowDataBound改变gridview的列值

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

从数据库中所取得的值绑定在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.csdn.net/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="调用" οnclick="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.csdn.net/mingzhecode/archive/2007/10/08/1814546.aspx)


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

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/powerglover/archive/2009/05/05/4151315.aspx

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值