欢迎来到.net学习网

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

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

SmartGrid教程(四):数据与行操作

创建时间:2012年03月09日 15:57  阅读次数:(4739)
分享到:
SmartGrid的栏位名称大小写
SmartGrid的栏位名称在前台是区分大小写的,在后台(C#)是不区分大小写的。

注意:在下文中出现的"前台",是指在asp.net页面操作数据,即使用javascript来实现的。"后台"是指在cs页面,即使用C#语言来实现的。

SmartGrid设置单元格焦点
在asp.net页(前台)可使用focus()跳到焦点
focus(int rowIndex,string colName)。如果rowIndex大于总行数,自动跳到最后一行
使用blur()使单元格失去焦点

服务器端光标定位可使用CurrentRowIndex和CurrentColumnName属性。
例:
This.SmartGrid1.CurrentRowIndex=10;
This.SmartGrid1.CurrentColumnName =”CustomerName”;


(前台)SmartGrid前台栏位取值和赋值
getCellValue(int rowIndex,string colName)
setCellValue(int rowIndex,string colName,any value)

(前台)设置具体单元格可否编辑
可使用方法enableCell(string colName,bool enable):
在前台调用enableCell()之前需要调用focus()定位到行,调用enableCell()后最好使用blur()使单元格失去焦点,然后调用focus()跳到焦点单元格,这样可否编辑的状态才能立即生效,否则只有离开单元格才重新回来时可否编辑的状态才能生效
例:
var grid = document.getElementById("<%=this.SmartGrid1.ClientID % >");
rid.focus(0, "TaskName");
grid.enableCell("TaskName", false);
grid.blur();
grid.focus(0, "TaskName");

如果要设置某列所有行都不可编辑,可通过设置列的ReadOnly=false来实现
this.SmartGrid1.Columns[colIndex/colName].ReadOnly=false

(前台)SmartGrid行维护操作


(1)addRow:新增行(末尾新增)
语法:addRow()
新增行后SmartGrid会自动跳到新增的那行的第一个可编辑栏位

(2)insertRow:插入行(在焦点行前新增)
语法:insertRow()
新增行后SmartGrid会自动跳到新增的那行的第一个可编辑栏位。insertRow()会在焦点行前新增,如果需要在指定行前新增,应先调用focus()跳到指定行,然后调用insertRow(),如果当前SmartGrid没有一行数据,会在末尾新增。

(3)delRow:删除行(删除焦点行并在删除前提示)
语法:delRow()
删除行后SmartGrid会自动跳到下一行。delRow()会删除焦点行,如果需要删除指定行,应先调用focus()跳到指定行,然后调用delRow()。
删除行前会弹出对话框提示“是否删除选中的数据行”

(4)delRowa:删除行(删除焦点行但在删除前不提示)
语法:delRowa()
删除行后SmartGrid会自动跳到下一行。delRowa()会删除焦点行,如果需要删除指定行,应先调用focus()跳到指定行,然后调用delRowa()。

(5)delRowForced:强制删除指定行(删除指定行但在删除前不提示)
语法:delRowForced(int rowIndex)
删除行后SmartGrid会自动跳到下一行。如果rowIndex < 0 或 rowIndex  > 总行数 – 1,则不执行删除。

(6)delRestore:恢复最后删除的行
语法:delRestore()
注意只能恢复最后删除的行
调用delRestore()后最好调用focus()跳到恢复的行,这样焦点所在栏位值能立即看到新值,否则看到的是恢复前焦点单元格的值

(7)clear:删除所有行并且不能恢复
语法:clear()
注意必须先调用blur()失去焦点再clear(),否则clear后续操作时会报对象无效错误(BUG)

(8)fill:删除所有行(clear)后重新填充数据(xml数据)
该方法有BUG,后续操作会报对象无效错误,不要使用。
例:
var grid = document.getElementById("<%=SmartGrid1.ClientID % >");
    var dom = new ActiveXObject("MSXML.DOMDocument");
    dom.loadXML("<?xml version='1.0' encoding='gb2312'? ><detail ><row RowNumber='1' TaskCode='TaskCode1' TaskName='TaskName1' TaskType='TaskType1' PlanHours='PlanHours1' PlanBeginDate='PlanBeginDate1' PlanEndDate='PlanEndDate1' / ></detail >");
grid.fill(dom.documentElement)

可以考虑通过DOM操作来实现给栏位赋值
例:
var grid = document.getElementById("<%=SmartGrid1.ClientID % >");
    var dom = new ActiveXObject("MSXML.DOMDocument");
    dom.loadXML("<?xml version='1.0' encoding='utf-8'? ><detail ><row RowNumber='1' TaskCode='TaskCode1' TaskName='TaskName1' TaskType='TaskType1' PlanHours='PlanHours1' PlanBeginDate='PlanBeginDate1' PlanEndDate='PlanEndDate1' / ></detail >");
    var details = dom.getElementsByTagName("detail");
    //删除现有数据
    grid.blur();
    grid.clear();
    if (details.length  > 0) {
        var rows = details[0].getElementsByTagName("row");
        for (var i = 0; i < rows.length; i++) {
            grid.addRow();
            for (var j = 0; j < rows[i].attributes.length; j++) {
                grid.focus(i, rows[i].attributes[j].name);
                grid.setCellValue(i, rows[i].attributes[j].name, rows[i].attributes[j].value);
            }
        }
        grid.blur();
        grid.focus();
    }


(9)append
不删除行填充数据(xml数据),与fill相似
该方法有BUG,后续操作会报对象无效错误,不要使用。

(10)与行数有关的属性
rowCount:总行数
row:当前行号
(11)行维护快捷键:Ctrl+I添加行、Ctrl+D删除行、空格进入编辑。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

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

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

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

最新评论

共有评论7条
  • #1楼  评论人:匿名  评论时间:2012-4-5 17:02:03
  • lz的都是在哪看的,为什么有的函数在帮助里面都没有
  • #2楼  评论人:Wyf  评论时间:2012-4-5 17:38:50
  • 从源码和实践中总结出来的。
  • #3楼  评论人:Wyf  评论时间:2012-4-5 17:39:10
  • 官方的文档,很多方法都没有。
  • #4楼  评论人:匿名  评论时间:2012-9-5 14:04:00
  • lz,做两列联动的时候,我想在init里面把被联动的下拉选项根据第一项做好,但是如果这2列都用同一个htc的话,清空第二个的时候第一个也被清空了。
  • #5楼  评论人:Wyf  评论时间:2012-9-5 15:49:34
  • 那就分别使用不同的htc
  • #6楼  评论人:匿名  评论时间:2012-9-5 16:26:58
  • 分开的可以避免这个问题,那怎么在第二个列获得焦点的时候获取第一列的关联项,并保持当前的值呢。谢谢,试了几种办法都不行。
  • #7楼  评论人:Wyf  评论时间:2012-9-6 9:09:08
  • 获值的方法你可以参考一下这篇文章
    在SmartGrid控件中响应CheckBoxColumn列的选择事件示例
    http://www.lmwlove.com/ac/ID805

    保持当前项的值你可以在完成后再重新给下拉项的单元格式赋值就好了。
发表评论:
留言人:
内  容:
请输入问题 86+28=? 的结果(结果是:114)
结  果: