ASPXGridView ClientSideEvents如何获取所选行的KeyField值

时间:2012-01-15 03:07:15

标签: asp.net devexpress client-side aspxgridview

我正在尝试在客户端获取选定的网格行KeyField值;

我曾经尝试过以下几种结果:

方法#1

<ClientSideEvents RowClick="function(s, e) {var key= grid.GetSelectedKeysOnPage()[0];}" />
//This gives previous selected rows value everytime

方法#2

<ClientSideEvents RowClick="function(s, e) { grid.GetRowValues(grid.GetFocusedRowIndex(), 'MyKeyFieldName', OnGetRowValues); }" />
//This gives previous selected row and also gives an error: "A primary key field specified via the KeyFieldName property is not found in the underlying data source. Make sure.. blabla" But the MyKeyFieldName is true and i dont want to make a callback, i dont want to use this method!

方法#3

<ClientSideEvents RowClick="function(s, e) { grid.GetRowValues(e.visibleIndex, 'MyKeyFieldName', OnGetRowValues); }">
//This gives the same result with Method #2

问题是:如何在没有回调或回发的情况下在客户端RowClick事件中收集当前所选行的KeyField Value(而不是之前但是)?

3 个答案:

答案 0 :(得分:18)

  

方法#2和#3

这两种方法都需要回调服务器。

确保您已指定行选择操作所需的ASPxGridView.KeyFieldName属性。

  

如何在没有回调或回发的情况下收集所选行@客户端的KeyField值?

处理客户端 ASPxClientGridView.SelectionChanged 事件;

通过“ e.isSelected ”属性确定刚刚选择的行;

通过客户端 ASPxClientGridView.GetRowKey 方法确定行的keyValue。

将“ e.visibleIndex ”属性作为参数传递:

<ClientSideEvents SelectionChanged="function(s, e) {
    if (e.isSelected) {
        var key = s.GetRowKey(e.visibleIndex);
        alert('Last Key = ' + key);
    }
}" />

答案 1 :(得分:1)

如何通过3个简单的步骤。

在我的情况下,当用户点击行时,我希望从ASPxGridView获取字段('ID')的内容...

  1. 为行单击创建ClientSideEvent并放入“RowClick(s,e);”在功能。
  2. 创建事件将调用的实际函数,如下所示 - 这里是棘手的部分;不要使用GetFocusedRowIndex()来获取索引,因为它是FOCUSED索引。使用e.visibleIndex

    function RowClick(s, e) {
        // Do callback to get the row data for 'ID' using current row.
        MyAspxGridView.GetRowValues(e.visibleIndex, 'ID', OnGetRowId);
    }
    
  3. 创建回调以获取所需字段。我得到'身份证'。

    function OnGetRowId(idValue) {
        alert('ID: ' + idValue.toString());
    }
    

答案 2 :(得分:0)

function OnbtnOkClick(s, e) {
    grid.GetRowValues(grid.GetFocusedRowIndex(), 'FieldName1;FieldName2', OnGetRowValues);
}

function OnGetRowValues(values) {
    var fName1 = values[0];
    var fName2 = values[1];
    txt1.SetText(fName1);
}