利用RowDataBound改变gridview的列值

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

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

比如说:

0 跟单员

1 为采购员

2 为审单员

3.为管理员

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





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


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

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

CASE语句的两种格式:

语法格式为:
case <单值表达式>
       when <表达式值> then
       when <表达式值> then
       ...
       when <表达式值> then
       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中的相关事件

  />   //指定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.实现字体颜色改变

前台用超链接列



后台:

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打开新窗体并获得焦点




    在按钮中调用:


子窗体代码:

注: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

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



上一篇: 推荐几个经典的配色网站
下一篇: Web技术期刊2008年第2期(总第22期)
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 9067
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 30 字 | UBB代码 关闭 | [img]标签 关闭