Существует удивительное отсутствие примеров для одной из основных операций сетки. Особенно, если вы хотите отправить строки обратно на сервер для дальнейшей обработки.
Проблема с 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 >";
settings.SettingsPager.PrevPageButton.Text = "< 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"];
}
Таким образом, вы можете обрабатывать все данные, которые вы хотите на стороне сервера
+1 Для предотвращения обратного вызова. – manadart
Я не согласен с вашим решением полностью. Поскольку в соответствии с [GetSelectedFieldsOnPage] (https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewScriptsASPxClientGridView_GetSelectedKeysOnPagetopic) _ и мое собственное тестирование с помощью этой функции_, оно выбирает только строки, выбранные на этой странице , Например, если ваша сетка показывает записи на 15 страницах, отмеченных pageSize, тогда вы получите только выбранные строки первой страницы. Что делать, если вам нужно получить выбранные строки на всех страницах, тогда вам понадобится эта функция ** GetSelectedFieldValues **. –