2012-04-12 2 views
4

Я использую ASP.NET C# MVC3 с шаблонами бритвы, и я хочу знать следующее:Как получить выбранные строки GridView в переменную Javascript?

У меня есть DevExpress GridView, в котором я могу выбирать строки.
Когда выбрано, я хочу передать их в переменную Javascript. Как мне это сделать?
А если я выбрал несколько строк одновременно, могу ли я получить их в массиве или что-то еще?

Edit: Спасибо за комментарий, теперь у меня есть следующая функция «Jquery»:

$(function() { // Verwijder functie 
    $('#select').click(function() { 
     var Delete = confirm("Weet u zeker dat u de geselecteerde records wilt verwijderen?"); 
     if (Delete) { 
      //Verwijder Funtie 
      var test = ; 
      alert(test); 
     } else { 
      //Niks 
     } 
    }); 
}); 

Мне нужно, чтобы получить идентификатор выбранных строк в переменную «тест», я пробовал с GetSelectedFieldValuesCallback и GetSelectedFieldValues. Но это не работает, как я ожидаю. Если кто-то может предоставить некоторый пример, я бы очень признателен этому.

ответ

7

Существует удивительное отсутствие примеров для одной из основных операций сетки. Особенно, если вы хотите отправить строки обратно на сервер для дальнейшей обработки.

Проблема с grid.GetSelectedFieldValues ​​() заключается в том, что она генерирует обратную передачу. Это означает, что вам понадобится вторая обратная передача для фактической отправки данных обратно на сервер.

Наиболее элегантным решением, которое я смог достичь, является использование grid.GetSelectedKeysOnPage(). Это вернет выбранные ключевые поля, определенные через settings.KeyFieldName = "Id";

вид, который отобразит вашу сетку.

<script type="text/javascript"> 
    $(function() { 
     $('#btn1').click(function() { 
      simpleGrid.PerformCallback(); 
     }); 
    }); 
    function OnBeginCallback(s, e) { 
     var selectedValues = s.GetSelectedKeysOnPage(); 
     e.customArgs["Id"] = ""; 
     for (var i = 0; i < selectedValues.length; i++) { 
      e.customArgs["Id"] += selectedValues[i] + ','; 
     } 
    } 
</script> 
@Html.Partial("ProductsPartial", Model.Data) 
<div id="btn1"> 
    btn 
</div> 

Важно, что вы создаете сетку в отдельном частичный вид (не знаю почему, но это то, что он говорит на странице DevExpress.

«ProductsPartial» частичный вид:

@Html.DevExpress().GridView(
     settings => 
     { 
      settings.Name = "simpleGrid"; 
      settings.KeyFieldName = "Id"; 
      settings.CallbackRouteValues = new { Controller = "yourController", Action = "Postback" }; 
      settings.SettingsText.Title = "simpleGridWithPostback"; 
      settings.Settings.ShowTitlePanel = true; 
      settings.Settings.ShowStatusBar = GridViewStatusBarMode.Visible; 
      settings.SettingsPager.Mode = GridViewPagerMode.ShowAllRecords; 
      settings.SettingsPager.AllButton.Text = "All"; 
      settings.SettingsPager.NextPageButton.Text = "Next &gt;"; 
      settings.SettingsPager.PrevPageButton.Text = "&lt; Prev"; 
      settings.Width = new System.Web.UI.WebControls.Unit(200); 
      settings.Columns.Add("Id"); 
      settings.Columns.Add("Name"); 
      settings.CommandColumn.Visible = true; 
      settings.CommandColumn.ShowSelectCheckbox = true; 
      settings.ClientSideEvents.BeginCallback = "OnBeginCallback"; 
     }).Bind(Model).GetHtml() 

И, наконец, контроллер, в котором вы можете обработать данные

public ActionResult Postback() 
{ 
    String data = Request["Id"]; 
} 

Таким образом, вы можете обрабатывать все данные, которые вы хотите на стороне сервера

+0

+1 Для предотвращения обратного вызова. – manadart

+0

Я не согласен с вашим решением полностью. Поскольку в соответствии с [GetSelectedFieldsOnPage] (https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewScriptsASPxClientGridView_GetSelectedKeysOnPagetopic) _ и мое собственное тестирование с помощью этой функции_, оно выбирает только строки, выбранные на этой странице , Например, если ваша сетка показывает записи на 15 страницах, отмеченных pageSize, тогда вы получите только выбранные строки первой страницы. Что делать, если вам нужно получить выбранные строки на всех страницах, тогда вам понадобится эта функция ** GetSelectedFieldValues ​​**. –

3

Я нашел решение. Следующая функция предоставляет данные, которые я хочу:

$(function() { 
    $('#select').click(function() { 
     Index.GetSelectedFieldValues("Id", OnGetSelectedFieldValues); 
    }); 
}); 

function OnGetSelectedFieldValues(result) { 
    for (var i = 0; i < result.length; i++){ 
      alert(result[i]); 
     } 
} 

Для людей, которые имели/имеют те же проблемы.

Изменить «Index» в

Index.GetSelectedFieldValues("Id", OnGetSelectedFieldValues); 

к тому, что вы назвали ваш GridView, и изменить «Id» в колонке вы хотите получить.

Вы также можете получить несколько данных из одной строки, чтобы сделать это вам нужно добавить еще один для цикла в function OnGetSelectedFieldValues(result) следующим образом:

function OnGetSelectedFieldValues(result) { 
    for (var i = 0; i < result.length; i++) 
     for (var j = 0; j < result[i].length; j++) 
      alert(result[i][j]); 
     } 
} 

Вы Виль также необходимо изменить сорбент следующим

Index.GetSelectedFieldValues("Id;YOUROTHERCOLUMN", OnGetSelectedFieldValues);

Я надеюсь, что это поможет в будущем для других пользователей.