zoukankan      html  css  js  c++  java
  • jsData 使用教程(八) 使用 TreeColumn 实现 TreeGrid

    TreeGrid 是企业级开发中,最为常用的一个控件。在 JData 中,可以使用 TreeColumn 来实现。如下图所示:

    但是在使用的时候,有一些要注意的地方。

    第一:表的结构必须为最为常用的自连接方式来实现树形的。 如 Northwind 数据库的 Employee 表。

    第二:数据量不能过大。使用 TreeColumn 需要一次性把所有数据加载到客户端。数据量过大则不适合使用。(万一数据量大呢?如何是好???)

    代码
    Sys.onReady(function() {

    var e = new WebApplication.EmployeeMetaType();
    var treeDataSource = new JData.TreeDataSource("../Services/NorthwindService.asmx", "GetEmployees", 'InsertEmployee', 'UpdateEmployee', 'DeleteEmployee');
    treeDataSource.set_selector([e.EmployeeID, e.ReportsTo, e.Country, String.format(
    '{0} + " " + {1} as Name', e.FirstName, e.LastName)]);
    treeDataSource.set_primaryKeyColumn(e.EmployeeID);
    treeDataSource.set_parentColumn(e.ReportsTo);

    var gridView = new JData.GridView(document.getElementById('gridView'));
    var columns = new Array();
    columns[columns.length]
    = new JData.BoundField(e.EmployeeID, null, '80px', null, true);
    columns[columns.length]
    = new JData.TreeColumn('Name', null, '180px', '120px', true);
    columns[columns.length]
    = new JData.BoundField(e.Country, null, '120px', null, true);

    var treeParentColumn = columns[columns.length] = new JData.TreeParentColumn('ReportsTo', 'ReportsTo', '120px', '114px');
    treeParentColumn.set_dataSource(treeDataSource);
    treeParentColumn.set_displayMember(
    'Name');
    treeParentColumn.set_valueMember(e.EmployeeID);

    var commandColumn = columns[columns.length] = new JData.CommandField();
    commandColumn.get_itemStyle().set_width(
    '80px');
    commandColumn.set_showEditButton(
    true);
    commandColumn.set_showCancleButton(
    true);
    commandColumn.set_showDeleteButton(
    true);

    gridView.set_columns(columns);
    gridView.set_dataSource(treeDataSource);
    gridView.set_caption(
    'Employees');
    JData.JQueryUIStyle(gridView,
    null, { autoUpdateStyle: false });
    gridView.initialize();


    $addHandler($get(
    'btnInsertEmployee'), 'click', function() {
    $(
    '#dlgInsert').dialog('open');
    });

    var dataSource = new JData.WebServiceDataSource("../Services/NorthwindService.asmx", "GetEmployees");
    dataSource.set_selector([e.EmployeeID, e.FirstName, e.LastName, e.ReportsTo]);
    dataSource.select(
    null, function(items) {
    for (var i = 0; i < items.length; i++) {
    var option = document.createElement('option');
    option.value
    = items[i][e.EmployeeID];
    option.text
    = items[i][e.EmployeeID] + " " + items[i][e.FirstName];
    $get(
    'ddlReportsTo').options.add(option);
    }
    });
    $(
    '#dlgInsert').dialog({
    modal:
    true,
    autoOpen:
    false,
    buttons: {
    'OK': function() {
    var employee = new WebApplication.Employee();
    employee.FirstName
    = $get('txtFirstName').value;
    employee.LastName
    = $get('txtLastName').value;
    employee.ReportsTo
    = $get('ddlReportsTo').value == '' ? null : $get('ddlReportsTo').value;
    treeDataSource.insert(employee,
    function() {
    employee.Name
    = employee.FirstName + " " + employee.LastName;
    $(
    '#dlgInsert').dialog('close');
    });
    }
    }
    });
    });

    代码和创建 GridView 差不多,有两个值得注意的地方。

    1、在这里创建 TreeDataSource 对象,而不是 WebDataSource 对象。在创建完后,必须设置主键,和相关连的外键。如下面这段代码所示。

    代码
    var e = new WebApplication.EmployeeMetaType();
    var treeDataSource = new JData.TreeDataSource("../Services/NorthwindService.asmx", "GetEmployees", 'InsertEmployee', 'UpdateEmployee', 'DeleteEmployee');
    treeDataSource.set_selector([e.EmployeeID, e.ReportsTo, e.Country, String.format(
    '{0} + " " + {1} as Name', e.FirstName, e.LastName)]);
    treeDataSource.set_primaryKeyColumn(e.EmployeeID);
    treeDataSource.set_parentColumn(e.ReportsTo);

    2、就是插入数据了。在这里插入数据不能使用 ColumnField 的 New 按钮。必须另外创建一个输入框来输入数据,然后通过 TreeDataSource 将数据提交到服务端。TreeColumn 对象会监听到 TreeDataSource 的 Insert 事件,当 TreeDataSource 执行完 insert 方法后,便会把数据插入到相应的行。如下面代码所示:

    代码
    $('#dlgInsert').dialog({
    modal:
    true,
    autoOpen:
    false,
    buttons: {
    'OK': function() {
    var employee = new WebApplication.Employee();
    employee.FirstName
    = $get('txtFirstName').value;
    employee.LastName
    = $get('txtLastName').value;
    employee.ReportsTo
    = $get('ddlReportsTo').value == '' ? null : $get('ddlReportsTo').value;
    treeDataSource.insert(employee,
    function() {
    employee.Name
    = employee.FirstName + " " + employee.LastName;
    $(
    '#dlgInsert').dialog('close');
    });
    }
    }
    });

    本文演示请看:http://www.jsdata.org/Demo/TreeGrid.html

    全部演示及代码下载:http://www.jdata.org

  • 相关阅读:
    list(range(10))解释
    numpy.random.normal函数
    适用于Python扩展程序包的非官方Windows二进制文件
    Linux--vi/vim编辑器常用命令
    Centos Mirrors List (centos7)
    windows--redis安装
    Celery 3.x 升级至 celery 4.x(转)
    windows/linux(centos7)安装SVN
    远程获取--snmp模块(python)/snmp-cmds,easysnmp
    FileZilla客户端(OS)连接Linux
  • 原文地址:https://www.cnblogs.com/ansiboy/p/1780558.html
Copyright © 2011-2022 走看看