(1)给栏位赋初始值
SmartGrid的RowXml属性可以用来给栏位赋初始值
例:以下设置price、num、inventory的初始值
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version='1.0' encoding='gb2312'? ><row price='0' num='5' inventory='洗衣机%'/ >");//折扣缺省置为.5,数量缺省置位
this. SmartGrid1.RowXml = doc.DocumentElement;
(2)格式化栏位数据
Format属性用来格式化字符串,默认的格式化字符串为空串。
也可以通过设置FormatFunction属性获取或设置列的格式化脚本方法名。字符串、数字、日期都有自己的默认格式化方法,程序员可以定义自己的格式化方法,默认为空字符串。只有设置了栏位的DataType为非字符类型(如System.Decimal、System.DateTime)才可调用格式化函数。
客户端定义脚本方法
function myformat(val,format,digits)
{
if(parseInt(val) >100)
{
return "<font color='red' >"+ val +"</font >"; //如果用户录入的值大于100,则显示红色。程序员可以返回HTML
}
return val;
}
myformat有三个参数:
val--当前单元格的值,SmartGrid调用时传入
format--
SmartGridColumn类DataFormatString属性值,SmartGrid调用时传入
digits--SmartGridColumn类Scale属性值,SmartGrid调用时传入
应设置EditorClientScriptUrl属性为某个htc文件,并设置ExtendedProperties属性带入htc文件中。SmartGrid要求在ExtendedProperties属性中设置数据栏位(例:EditorClientScriptUrl = "htc/Mydropdownlist.htc"),并且必须要有一个显示栏位和一个数据栏位,两者数据类型(包括可否为空设置)必须一致。如果只使用一个栏位,则栏位失去焦点时会显示成数据值。
例:MyDropDownList.htc代码
<PUBLIC:COMPONENT >
<PUBLIC:PROPERTY NAME="grid"/ ><!--返回当前的Grid,通过该属性,可以访问当前Grid的相关信息-- >
<!--和.Net中的DataColumn的定义类似-- >
<PUBLIC:PROPERTY NAME="columnName"/ > <!--列名-- >
<PUBLIC:PROPERTY NAME="dataType"/ ><!--数据类型,如System.String-- >
<PUBLIC:PROPERTY NAME="allowNull"/ ><!--是否允许为空-- >
<PUBLIC:PROPERTY NAME="scale"/ >
<PUBLIC:PROPERTY NAME="precision"/ ><!--精度,主要用于数字型-- >
<PUBLIC:PROPERTY NAME="maxLength"/ ><!--最大长度,主要用于文本-- >
<PUBLIC:PROPERTY NAME="extendedProperties"/ ><!--一般用xml串,因为这在存储很多信息时,解析非常方便-- >
<PUBLIC:PROPERTY NAME="input" / >
<PUBLIC:PROPERTY NAME="value" GET="getValue" PUT="setValue"/ >
<PUBLIC:METHOD NAME="cellDataCheck"/ >
<PUBLIC:METHOD NAME="init"/ ><!--用户可根据条件进行初始化,参见示例-- >
</PUBLIC:COMPONENT >
<script language="javascript" >
//列表框一般有两个值,一个是Text,一个是value。valColumn指明存储选择的value的Grid列
var valColumn = null;
var extendedProp = element.extendedProperties;
if (extendedProp != null && typeof(extendedProp) != "undefined")
{
var dom = new ActiveXObject("MSXML.DOMDocument");
dom.loadXML(extendedProp);
valColumn = dom.documentElement.getAttribute("valueColumn");
}
//用户在录入结束后,离开当前单元格时执行的校验方法。
/*参数说明:
args.checkStatus 校验的结果,有三种类型的值 ,如下:
"success" 用户录入了可以接受的数据--缺省值
"cancel" 用户录入了非法数据,取消用户的录入,结束编辑。
"retry" 用户录入了非法数据,焦点回到编辑框,让用户重新录入.
*/
function cellDataCheck(args) {
args.status = "success"; //缺省值,如果没有什么校验,可以不实现该方法。
}
//当离开编辑时,根据编辑器的内容给相关的单元格赋值
function getValue()
{
var r = grid.row;
var val;
if (element.selectedIndex >= 0) {
val = element.options[element.selectedIndex].value;
//如果有储存value的列,则将当前选择项的值放到该列中
if (valColumn != null) {
grid.setCellValue(r, valColumn, val);
}
return element.options[element.selectedIndex].text;
}
else {
return "";
}
}
//当进入编辑时,根据当前单元格的内容,给编辑器赋值
function setValue(vVal)
{
var r = grid.row;
var val = vVal;
//如果有储存value的列,则从该单元格取值
if(valColumn != null)
{
val = grid.getCellValue(r,valColumn);
}
var options = element.options;
var length = options.length;
for(var i=0;i<length;i++)
{
var option = options[i];
if(option.value == val)
{
option.selected = true;
return;
}
}
}
//条件初始化,主要用于那些因为某些上下文的变化,编辑器应作出相应改变的场合。一般不实现。
function init() {
//删除原有的选项
var options = element.options;
var len = options.length;
for(var i=0;i<len;i++)
{
options.remove(0);
}
var option = document.createElement("OPTION");
option.text="软件开发";
option.value="SoftDevelop";
element.add(option);
option = document.createElement("OPTION");
option.text="系统实施";
option.value = "SystemImplementation";
element.add(option);
option = document.createElement("OPTION");
option.text = "市场营销";
option.value = "Marketing";
element.add(option);
}
</script >
也可在后台(如Page_Load事件)为下拉栏位构造下拉列表,例:
SmartGridColumn col = this.DataGrid1.Columns.FromColumnName("TaskType");
DropDownList l = col2.ControlEditor as DropDownList;
l.Items.Add(new ListItem("软件开发", "SoftDevelop"));
l.Items.Add(new ListItem("系统实施", "SystemImplementation"));
l.Items.Add(new ListItem("市场营销", "Marketing"));
(4)复选框编辑风格(SmartWeb:CheckBoxColumn)
只需要定义SmartWeb:CheckBoxColumn类型栏位便可。