zoukankan      html  css  js  c++  java
  • 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(此代码来源于:http://blog.csdn.net/mingzhecode/archive/2007/10/08/1814546.aspx)
    在父窗体中调用子窗体的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 + "')");
            }
        }

  • 相关阅读:
    团队第三次作业 ——需求分析
    个人作业——IM SDK 评测
    AFLW如何获取你想要的21点人脸关键点数据
    本地ubuntu下pycharm 如何利用远程开发环境时显示图片
    pandas如何去掉时间列的小时只保留日期
    如何通过numpy获得二维或多维数组的最大、小值索引
    怎么理解np.random.seed()?
    python+opencv2相机位姿估计
    Image Style Transfer:多风格 TensorFlow 实现
    python matplotlib 播放图片变化过程
  • 原文地址:https://www.cnblogs.com/duwamish/p/1457562.html
Copyright © 2011-2022 走看看