グリッドの最も基本的な操作の1つについては、驚くほど例が不足しています。特に、さらに処理するために行をサーバーに送り返したい場合。
grid.GetSelectedFieldValues()の問題は、ポストバックが生成されることです。つまり、実際にサーバーにデータを送り返すには、2番目のポストバックが必要になります。
私が達成できた最も洗練された解決策は、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"];
}
このようにして、サーバー側で必要なすべてのデータを処理できます