欢迎来到.net学习网

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

您当前所在位置:首页 » SmartGrid使用教程 » 正文

SmartGrid教程(八):单元格属性操作

创建时间:2012年03月10日 23:23  阅读次数:(6793)
分享到:

(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调用时传入

(3)下拉编辑风格,即SmartWeb:DropDownListColumn


应设置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类型栏位便可。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:】

打赏

取消

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

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

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

最新评论

共有评论24条
  • #1楼  评论人:匿名  评论时间:2012-5-14 13:55:31
  • 不知道这个问题应该在哪里提了,就在这里了,呵呵 在OnRowDeleting里面,如果取消删除,返回之后表格选择不是整行选择了,而是单独选择一个单元格,要让当前列失去焦点,再点回来才行,lz帮忙看看。
  • #2楼  评论人:Wyf  评论时间:2012-5-14 15:04:49
  • 你可以试一下,在OnRowDeleting方法中取消删除后再次选择整行数据。
  • #3楼  评论人:匿名  评论时间:2012-5-14 15:34:55
  • 怎么选择整行呢,好像没有单独选择一行的方法。
  • #4楼  评论人:Wyf  评论时间:2012-5-14 16:13:22
  • 我也没有找到在js单独选择一行的方法,不过你可先全选,再取消其它行的选择。这个方法虽然笨了点了,也可以实现功能。找到好的方法再替代了。全选与取消选择可以这一节: SmartGrid教程(五):选中与取消选中行数据 http://www.lmwlove.com/ae/ID116
  • #5楼  评论人:匿名  评论时间:2012-5-14 16:37:49
  • 试了,不行,好像SelecttionMode变成了单元格选择,而且再点击删除不触发了。
  • #6楼  评论人:匿名  评论时间:2012-5-14 16:54:21
  • 现在这样处理的 var rowIndex= ev.row; ev.cancel=true; grid.addRow(); grid.focus(grid.rowCount-1,"colName"); grid.delRowForced(grid.rowCount-1); grid.focus(rowIndex,"colName"); 看lz有更好的方法没。
  • #7楼  评论人:Wyf  评论时间:2012-5-14 17:02:04
  • 这样不只是设置一个单元格为焦点么?还是没有选择全行啊
  • #8楼  评论人:Wyf  评论时间:2012-5-14 17:05:38
  • 首先 grid.selectAll(); 再 for (var i = 0; i < grid.rowCount; i++) { if(i<>ev.row){ grid.removeSelect(i)} }
  • #9楼  评论人:匿名  评论时间:2012-5-14 17:09:56
  • 这个代码我这运行不行,没效果。 我是先在最后新增一行,然后再删除新增的这行,再把焦点移回去。默认是选择全行的,但是阻止删除之后就不行了。
  • #10楼  评论人:Wyf  评论时间:2012-5-14 17:18:21
  • 那就不太清楚了。我还没有用到过你这样的需求呢。smartgrid有很多这些不确定的问题,可能这就是他的bug了。要是你有时间的话,可以联系我,我发smartgrid的源码你,你自己慢慢改。
  • #11楼  评论人:Wyf  评论时间:2012-5-14 17:20:00
  • 我也是在源码中增加了部分符合自己需求的功能。它原来的功能,就没有去研究了。因为找不到官方的demo,比较难弄。
  • #12楼  评论人:匿名  评论时间:2012-5-14 17:27:02
  • 管理系统,你懂的,删除之前要各种判断。 我的邮箱是q123126@126.com,谢谢lz。
  • #13楼  评论人:Wyf  评论时间:2012-5-15 9:03:34
  • 已经发到你的邮箱了
  • #14楼  评论人:匿名  评论时间:2012-5-15 10:05:16
  • 谢谢,请教一下在表格文本框里面怎么根据条件屏蔽按键,其他的可以屏蔽,但是后退键屏蔽不了。

    还有这个密钥是多少呢
  • #15楼  评论人:Wyf  评论时间:2012-5-15 10:08:30
  • 第一个没有明白你的意思呢
    第二个,没有密钥了也是可以的。直接确定。
  • #16楼  评论人:匿名  评论时间:2012-5-15 14:27:24
  • 第一个就是说在smartgrid里面的文本框,我想屏蔽输入,其他按键都可以屏蔽,但是删除键却屏蔽不了。
  • #17楼  评论人:Wyf  评论时间:2012-5-15 14:50:54
  • 这个和SmartGrid的文本框没有直接关系了吧。属于js范畴,你baidu一下就有了。
  • #18楼  评论人:匿名  评论时间:2012-5-15 14:58:52
  • 恩,确实是js,后退删除键根本捕捉不到。
  • #19楼  评论人:Wyf  评论时间:2012-5-15 15:32:22
  • 那就先试试你的代码不放在SmartGrid的事件内看能不能捕捉的到,以确定你的js是正确的。如果你的js是正确的。但放到SmartGrid事件中不行,你可能要到源码中找原因了。
  • #20楼  评论人:匿名  评论时间:2012-5-15 17:38:01
  • 如果用jquery里面$(document).keydown(function(){})
    这样可以取,但是直接写在onkeydown里面不行,onkeypress也不行,不管在不在SmartGrid里面都一样。在onkeypress KeyCode取不到,在onkeydown里面可以取到,但是不能修改KeyCode为0。
  • #21楼  评论人:匿名  评论时间:2012-9-4 14:28:09
  • lz,怎么把某列做成可选择日期的列,比如My97DatePicker,怎么合并到里面去。
  • #22楼  评论人:Wyf  评论时间:2012-9-5 15:46:47
  • 给你做了一个示例,你可以参考一下:
    在SmartGrid列中添加日期控件示例
    http://www.lmwlove.com/ac/ID890
  • #23楼  评论人:匿名  评论时间:2012-10-7 11:07:24
  • lz,有没有做过多行合并的,就是如果相同的数据。就合并到一起显示。
  • #24楼  评论人:Wyf  评论时间:2012-10-10 8:38:57
  • 这个应该是在数据源中处理好一些。数据源处理好了再绑定到控件上。
发表评论:
留言人:
内  容:
请输入问题 45+52=? 的结果(结果是:97)
结  果: