3

我正在尝试在我的网格上进行行选择,但在设置或获取 datakey 值时遇到了困难,因为我在上面找不到任何文档。

$("#divGrid").igGrid({
            columns: [
                { headerText: "@Manage.gridColumnEmployeeNumber", key: "EmployeeNumber" },
            ],
            dataKeyFields: "EmployeeNumber",  //Is this how you set the dataKeys?
            autoGenerateColumns: false,
            dataSource: jsonp,
            features: [
                {
                    name: "Selection",
                    rowSelectionChanging: rowSelectionChanging
                }
            ]
        });
    });

这根本不起作用。如何在这部分代码中访问我的 dataKey (primaryKey)?

    function rowSelectionChanging(evt, ui) {
        if (confirm) {
            var rows = ui.getSelectedRows();
            var selectedRow = rows.getItem(0);
            var selectedDataKey = selectedRow.get_dataKey();

            alert(selectedDataKey);
        } else {
            return false;
        }
    }
4

2 回答 2

7

[...] dataKeyFields: "EmployeeNumber", //你是这样设置数据键的吗?[...]

足够近。它实际上是像这样的'primaryKey':

[...]
主键:“员工编号”,
[...]

对于第二部分,我想这不是很明显,但是作为参数传递的行是被选择的实际 DOM TR 元素,你可以(正如你当前的设置所建议的那样)清楚地选择它的单元格的键,比如所以:

var rowKey = $(ui.row.element).children().eq(0).text(); //may need to parse if int

注意: eq() 方法采用从零开始的索引,并且就结构而言,行的子元素是单元格。在您的情况下,主键列是第一个(也是唯一一个),因此索引为 0。

我发现对编程更友好的另一种方法是直接从数据源获取密钥(更清晰易读且无需解析):

var rowKey = ui.owner.grid.dataSource.dataView()[ui.row.index].EmployeeNumber;

注意:“所有者”是负责事件(选择)的实际小部件,它引用了您的“网格”,您可以从那里访问数据源。要获取记录,请使用 '.data()' 或 '.dataView()' - 后者仅包含索引所基于的实际可见行,如果启用了任何其他功能(分页、排序、过滤),则应使用后者..)。

这是(底部)描述选择事件提供的文档页面 - http://help.infragistics.com/NetAdvantage/jQuery/2012.1/CLR4.0?page=igGrid_Selection_Overview.html

这是完整的 API 参考:http ://help.infragistics.com/jQuery/2012.1/ui.iggridselection#events - 从这里您可以深入了解任何网格/网格功能/数据源 API 和事件有所有有用的示例片段列出的参数。

PS 如果不打算控制用户的选择,请考虑使用“rowSelectionChanged”中的“-ed”事件 - 可用的参数是相同的。不同之处在于“-ing”是在选择过程中触发的,它会阻塞 UI,如果您添加一些更繁重的逻辑,这可能会导致应用程序响应速度不快。

于 2012-08-21T11:46:10.220 回答
0

尝试 var rowKey = ui.owner.grid.options.primaryKeyValue;

于 2015-08-20T03:33:46.730 回答