关于DataGrid数据绑定后对字段进行替换的问题与办法

简介:

在项目中,我再次用到了VS2003的DataGrid控件进行数据显示。
根据要求,我需要在第8列将MSSQL2000中的varchar类型的数据"0"与"1"显示成"未传送"与"已传送"
于是我便在DataGrid与DataSet进行DataBind()后,再用for循环进行替换:

myDataGrid.DataSource=myDataSet;
myDataGrid.DataBind();
for( int i=0;i<myDataSet.Tables[0].Rows.Count;i++)
{
    if(myDataGrid.Items[i].Cells[7].Text=="0")
   {
      myDataGrid.Items[i].Cells[7].Text=" 未传送";
   }
    else
   {
      myDataGrid.Items[i].Cells[7].Text=" 已传送";
   }
}


运行没有问题,于是我接着做DataGrid的分页功能,将页面设置成20行,并添加事件:

myDataGrid.CurrentPageIndex = e.NewPageIndex;
         
myDataGrid.DataSource=myDataSet;
myDataGrid.DataBind();


再一运行,报错了。显示大概是前面用for循环进行替换超出index范围值。
怎么办?我立刻想到了两种办法:
1.直接把数据库中的varchar类型的数据"0"与"1"更改成"未传送"与"已传送"
2.用模板列与DataBinder.Eval进行更改绑定(我选择此方法)
.aspx

< asp:TemplateColumn  HeaderText ="传递状态" >
    < ItemTemplate >
       < asp:Label  id ="sendLabel"  runat ="server"  Text ='<%#str_Mark(DataBinder.Eval(Container,"DataItem.mark").ToString())% >'>
       </ asp:Label >
    </ ItemTemplate >
</ asp:TemplateColumn >

.aspx.cs

// 修改DataGrid 的 Mark 字段的显示
public  string str_Mark( string strSign)
{
    string strMassage = "";
    if(strSign == "0")
   {
      strMassage = "<font color='red'>"+"未传送"+"</font>";                
   }
    else  if(strSign == "1")
   {
      strMassage = "<font color='green'>"+"已传送"+"</font>";            
   }
    return strMassage;
}


以前看了一篇文章,说Bind要比Eval的功能和性能要好,大家也可以进行一些更改替换。
当然,如果大家有比我更好的解决办法,不吝赐教!

作者: XuGang   网名:钢钢
出处: http://xugang.cnblogs.com
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址!


本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/11/29/976571.html,如需转载请自行联系原作者
相关文章
|
6月前
|
JavaScript 前端开发
【vue】设计一个表格,增删改查,分页,固定列,特殊字符校验
【vue】设计一个表格,增删改查,分页,固定列,特殊字符校验
37 0
【vue】设计一个表格,增删改查,分页,固定列,特殊字符校验
|
6月前
|
缓存 JavaScript 前端开发
vue + element Table的数据多选,多页选择数据回显,分页记录保存选中的数据。
vue + element Table的数据多选,多页选择数据回显,分页记录保存选中的数据。
113 0
|
存储 JavaScript 前端开发
vue前端实现配置化表格el-table列的隐藏与展示(具有记忆功能)
vue前端实现配置化表格el-table列的隐藏与展示(具有记忆功能)
747 0
|
JavaScript
Vue表单中判断当前行输入框的值与整个表单的输入框的值是否重复(过滤自身数据)
使用Element输入框自带change事件获取到scope.$index以及input框中的值(@change="change(scope,$event)"); 使用forEach遍历整个表单的数据(item是需要遍历的数组,index是数组中元素的下标);
488 0
Vue表单中判断当前行输入框的值与整个表单的输入框的值是否重复(过滤自身数据)
|
JavaScript
VUE element-ui 之table表格勾选复选框动态带出(将某列的值赋值给指定列)对应列的数据
VUE element-ui 之table表格勾选复选框动态带出(将某列的值赋值给指定列)对应列的数据
1010 0
VUE element-ui 之table表格勾选复选框动态带出(将某列的值赋值给指定列)对应列的数据
|
JavaScript 数据库
EasyUI_datagrid实现动态加载列并为其绑定数据
EasyUI_datagrid实现动态加载列并为其绑定数据
653 0
Document字段发生变化后,报的错
2016-10-11 15:27:47,828 [ERROR] [main] SpringApplication:838 - Application startup failedorg.springframework.
1965 0
|
SQL
【自然框架】表单控件 之 一个表单修改多个表里的记录
      FormView 确实挺方便的,不过他也有几个小问题,只把FormView拖到页面里是不行的,还得再拽几个文本框、下拉列表框这一类的控件,还得布局。然后还要弄一个DataSource的控件,利用这个控件把文本框等控件和字段对应上,DataSource也有一个致命的缺点,默认情况下,他是把SQL语句以属性的形式放在了.aspx页面里面。
903 0
|
JavaScript
elementUI table手动实现列宽改变数据绑定解决思路参考
element UI table文档:http://element-cn.eleme.io/#/zh-CN/component/table#table-events 根据文档我们发现可以通过header-dragend事件来获取列...
3406 0