有一個令人驚訝的缺乏網格最基本的操作之一的例子。特別是如果您想要將行發送回服務器進行進一步處理。
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 2013-02-14 21:18:04
我完全不同意你的解決方案。因爲按照[GetSelectedFieldsOnPage](https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewScriptsASPxClientGridView_GetSelectedKeysOnPagetopic)_和我自己對此函數的測試,它只會選擇在該頁面上選擇的行。例如,如果您的網格在由pageSize標記的15個頁面中顯示記錄,那麼您將僅獲得第一頁的選定行。如果您需要在所有頁面上獲取選定的行,那麼您將需要該函數** GetSelectedFieldValues **。 – 2014-03-01 05:01:20