欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

为SmartGrid控件自定义格式化单元格数据

创建时间:2012年04月27日 09:41  阅读次数:(14129)
分享到:
在SmartGrid控件的列提供了Format属性来让我们格式化单元格中的数据,但这个属性能实现的效果有限,如果一些相对复杂的格式化需求就无法完成了,这章我们就演示如果利用FormatFunction函数来格式化单元格数据。

本章我们要实现的功能是:
如果我们在SmartGrid的列中填入一个大于0的数字时,数字以红色显示,如果我们在SmartGrid的列中填入一个小于0的数字时,数字以绿色显示。

通过这个示例演示如何自定义单元格中的数据格式。

首先在页面放入一个SmartGrid控件,并为列"price"设置FormatFunction属性的值。
<SmartWeb:SmartGrid ID="SmartGrid1" runat="server" ReadOnly="false" DataKeyField="ID" AllowDelete="true" AllowAdd="true">
    <Columns>
        <SmartWeb:TextBoxColumn ColumnName="price" HeaderText="单价" FormatFunction="myformat"
            DataType="System.Decimal" />
    </Columns>
</SmartWeb:SmartGrid>

然后在页面的js中定义FormatFunction方法:
<script type="text/javascript" language="javascript">
    function myformat(val, format, digits) {
        if (parseInt(val) > 0) {
            return "<font color='red'>" + val + "</font>";
        }
        else if (parseInt(val) < 0) {
            return "<font color='green'>" + val + "</font>";
        }
        return val;
    }
</script>

运行页面,并在SmartGrid的Price分别填入数字1,0,-1,可看到效果如下:

页面按我们的要求以红色显示了1,绿色显示了-1,测试成功!

可以看到上面的myformat方法中有三个参数,意思分别如下:
val--当前单元格的值,
format--SmartGridColumn类Format属性值
digits--SmartGridColumn类Scale属性值

有朋友说,FormatFunction是不是只有在可编辑的列中才有效呢?当然不是,我们可以将上例中的TextBoxColumn列改为SmartGridColumn列,并在后台为SmartGrid中赋值看效果。
<SmartWeb:SmartGrid ID="SmartGrid1" runat="server" ReadOnly="false" DataKeyField="ID" AllowDelete="true" AllowAdd="true">
    <Columns>
        <SmartWeb:SmartGridColumn ColumnName="price" HeaderText="单价" FormatFunction="myformat"
            DataType="System.Decimal" />
    </Columns>
</SmartWeb:SmartGrid>

然后在后台为SmartGrid赋值:
protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("price", typeof(decimal));
    dt.Rows.Add(1);
    dt.Rows.Add(0);
    dt.Rows.Add(-1);

    this.SmartGrid1.DataSource = dt;
    this.SmartGrid1.DataBind();
}

效果如下:

测试成功,说明FormatFunction对SmartGridColumn同样是有效的。

注意:只有设置了列的DataType为非字符类型(如System.Decimal、System.DateTime)才可调用FormatFunction格式化函数。

我想上位朋友是不是因为忘记设置DataType属性而使设置无效呢 :),再仔细测试一下吧。d
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论4条
  • #1楼  评论人:匿名  评论时间:2012-5-7 17:52:51
  • lz,在数值列中,如果直接取数据源,那么相应列会是空的,而不是默认0,结果导致保存出错,我现在是遍历处理的,不知道有没有快捷的方法。
  • #2楼  评论人:Wyf  评论时间:2012-5-8 15:26:12
  • 这个我也没有找到好的方法,还真只能取到数据源后再处理了。
  • #3楼  评论人:匿名  评论时间:2012-5-8 15:34:11
  • 终于等到lz回复了,还是谢谢你。呵呵
  • #4楼  评论人:Wyf  评论时间:2012-5-8 16:04:22
  • 不好意思啊,最近工作比较忙一些。
发表评论:
留言人:
内  容:
请输入问题 86+21=? 的结果(结果是:107)
结  果: