telerik-grid onRowВыбрать как получить id? - PullRequest
4 голосов
/ 10 декабря 2010

Привет, я новичок в asp.net mvc и telerik.Как я могу получить значение o.Id при нажатии на строку?

 <%= Html.Telerik().Grid(Model)                    
                    .Name("RolesGrid")
                    .DataKeys(keys => keys.Add(o => o.Id))                               
                    .Selectable()                    
                    .Columns(columns =>
                    {
                        columns.Bound(o => o.Name);
                        columns.Bound(o => o.Description);

                    })
                    .Pageable()                       
                    .ClientEvents(events => events                    
                    .OnRowSelect("onRowSelect"))

             %>

в js-коде:

 function onRowSelect(e)   {
        var ordersGrid = $('#RolesGrid').data('tGrid');  
        var row = e.row;
        var dataItem = ordersGrid.dataItem(row);
        alert(dataItem);
    }

Но dataItem имеет значение null, и в сгенерированном html-файле нет значения id,Спасибо и извините за мой плохой английский

Ответы [ 4 ]

12 голосов
/ 17 июня 2011

Итак, в конце концов у меня есть лучший способ получить идентификатор:

  1. привязать функцию onRowSelect к вашей сетке
  2. написать следующий код в onRowSelect

    var dataItem = jQuery('#MyGridId').data('tGrid').dataItem(e.row);     
    alert(dataItem['Id']);
    

    dataItem - это карта, у которой есть все свойства модели сетки, поэтому вы получаете все, что вы хотите

Вот и все, спасибо

10 голосов
/ 09 февраля 2011

С Telerik Grid Демо .

Вы должны поместить идентификатор в сетку Telerik как скрытый столбец.

// ...
.DataKeys(keys => keys.Add(o => o.Id))                               
.Selectable()
.Columns(columns =>
    {
        columns.Bound(o => o.Id).Hidden();
        columns.Bound(o => o.Name);
        columns.Bound(o => o.Description);
    })
// ...
.ClientEvents(events => events.OnRowSelect("onRowSelect"))

Будет отображаться

<td style="display: none; ...">...</td>

И тогда вы получите это так:

function onRowSelect(e)   {
    var id = e.row.cells[0].innerHTML;
    // ...
}

Примечания:

  • Я знаю, это ужасно.
  • Я не знаю, почему telerik заставляет вас вызывать метод .DataKeys(...), если нет документированного способа получить значение для определенного ключа.
  • Если вы используете группировку или какую-либо другую функцию, она становится более сложной, поскольку положение скрытого столбца зависит от порядка группировки.
1 голос
/ 24 июня 2015

Я нашел немного более элегантный способ сделать это, заимствуя ответ Ммутилвы.

Начните с помещения скрытого столбца и события изменения таким же образом:

.DataKeys(keys => keys.Add(o => o.Id))                               
.Selectable()
.Columns(columns =>
    {
        columns.Bound(o => o.Id).Hidden();
        columns.Bound(o => o.Name);
        columns.Bound(o => o.Description);
    })
.ClientEvents(events => events.OnRowSelect("onRowSelect"))

Но тогда в функции javascript есть лучший способ фактически выбрать объект, а затем скрытую строку:

    function onRowSelect(e)   {
        var grid = e.sender;
        var currentitem = grid.dataItem(this.select());
        var Id = currentitem.Id;
        //then do whatever with the ID variable
    }

Источник

0 голосов
/ 10 декабря 2010

Измените функцию onRow. Выберите это:

function onRowSelect(sender, args){...}

Отправителем будет сетка, и из аргументов вы можете определить, какой элемент был выбран.

Посетите сайт справки Telerik для получения подробной информации о том, как получить данные с помощью API на стороне клиента: http://www.telerik.com/help

...