在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