`
shirlly
  • 浏览: 1652076 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

利用RowDataBound改变gridview的列值

    博客分类:
  • .NET
阅读更多
需求是这样的,估计大家都会遇到这样的情况:

从数据库中所取得的值绑定在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 + "')");

        }

    }



转自:http://www.cnblogs.com/eastjazz/archive/2008/03/17/1110407.html
分享到:
评论

相关推荐

    GRIDVIEW列可随意改变位置

    如果需要在运行时根据用户需求调整列顺序,可以利用GridView的Columns集合在代码-behind中进行操作。首先,需要保存所有列,然后重新排序并添加到Columns集合中。 ```csharp protected void Page_Load(object ...

    任意改变GridView某一行颜色和任意单元格颜色

    综上,通过利用GridView的RowDataBound事件,我们可以灵活地改变GridView的行和单元格颜色,以满足各种用户界面的需求。同时,结合适当的逻辑判断和条件,可以实现高度定制化的数据呈现效果。在实际项目中,可以结合...

    GridView批量处理和重写列

    在本主题“GridView批量处理和重写列”中,我们将深入探讨如何利用C#语言在.NET框架下实现GridView的高级特性,包括批量操作和自定义列显示。 批量处理是提高用户界面效率的一种方式,它允许用户同时对多条记录进行...

    C#之GridView单元格分组显示与累计计算实例

    在本实例中,我们将会深入探讨如何利用C#实现GridView控件的单元格分组显示以及列累计计算功能。 一、GridView单元格分组显示 1. **设置分组**: GridView支持基于数据源中的字段进行分组。首先,你需要在数据绑定...

    asp.net如何得到GRIDVIEW中某行某列值的方法

    根据某列的值改变其样式最好的方法是在GridView的DataRowBound事件中想办法。在GridView中的行绑定数据后将立即执行DataRowBound事件。DataRowBound事件使用GridViewRowEventargs类作为事件变量。通过事件变量你能够...

    对GRIDVIEW的美化.zip

    3. **行事件处理**:利用RowDataBound事件,可以针对每一行的数据动态设置样式或执行其他操作,例如根据数据值改变行的背景色,或者添加特定的图标。 4. **分页**:默认的GridView分页可能不够美观,通过自定义分页...

    鼠标停留在GridView某一行时,行的颜色改变

    无论哪种方法,都需要确保在代码中正确处理事件和样式,以便在鼠标悬停时准确地改变GridView行的颜色。此外,对于复杂的交互效果,可能还需要结合JavaScript或jQuery等客户端技术来实现更平滑的动画效果。 通过以上...

    Gridview详解.doc

    通过处理GridView的RowDataBound事件,可以实现当鼠标移到某一行时改变其背景色。有两种实现方式:一种是直接设置行的DefaultCellStyle,另一种是使用CSS类。 6. **删除时的确认对话框**: 可以在RowDeleting事件...

    用GridView显示数据

    GridView提供了多种行事件,如RowDataBound、RowCommand、RowUpdating和RowDeleting等,可以捕获用户交互,进行条件判断、数据处理或界面定制。 5. 功能扩展: - 分页:启用`AllowPaging`属性,并配置`PageSize`...

    gridview72版绝技

    - 通过遍历GridView数据行,计算相关列的总和和平均值,并显示在合适的位置。 16. **数据导入Excel**: - 使用ADO.NET的`OleDbConnection`和`OleDbDataAdapter`读取Excel文件,再将数据填充到GridView。 以上...

    gridview 控件实例

    在描述中提到的“自定义反转”可能是指改变GridView的默认显示顺序,这可以通过以下方式实现: 1. 数据源排序:在数据绑定前对数据源进行排序,改变其内部元素的顺序。 2. GridView的SortExpression:设置列的...

    Gridview各种高级用法汇总(含代码示例)

    - `GridView1_RowUpdating`事件处理更新操作,获取编辑后的值,更新数据库,并重新绑定数据。 3. **正反双向排序**: - 可通过自定义列头的Click事件,实现正反向排序。 4. **GridView与DropDownList结合**: -...

    GridView 72般绝技 asp.net

    11. 联动下拉框:在GridView的某一列使用DropDownList,通过选择不同的选项,动态改变其他列的显示或数据。 12. 表格合并:使用HeaderFooterRowStyle属性和GridLines属性,可以设置表头和边框,实现单元格的合并。 ...

    Gridview72绝技gridview常用用法

    - **详细说明**:通过RowDataBound事件监听单元格的数据值,并根据条件动态修改样式。 #### 18. GridView加入自动求和求平均值小计 - **核心知识点**:自动计算Gridview中的汇总信息,如求和、平均值等。 - **详细...

    GridView_72般绝技

    GridView控件允许用户通过设置AllowSorting属性为True来实现列的排序功能。默认情况下,每页显示10条记录,可以通过调整PageSize属性更改每页记录数。单向排序可以通过在GridView的列定义中添加SortExpression属性...

    GridView 操作大全,手册,ajax

    - 可以通过在GridView中添加一个不绑定到任何数据源的BoundField,并在`RowDataBound`事件中动态设置其值。 9. **字符串格式化**: - 对于时间、货币等格式,可以在BoundField的`DataFormatString`属性中指定相应...

Global site tag (gtag.js) - Google Analytics