4

ASP.NET C#MVC3をかみそりのテンプレートで使用しています。次のことを知りたいです。

行を選択できるDevExpressGridViewがあります。
選択したら、それらをJavascript変数に渡します。どうすればよいですか?
また、同時に複数の行を選択した場合、それらを配列などで取得できますか?

編集:コメントありがとうございます。次の「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
        }
    });
});

選択した行のIDを変数「test」に入れる必要があります。GetSelectedFieldValuesCallbackとGetSelectedFieldValuesを使用して試しました。しかし、これは私が期待しているようには機能していません。誰かがいくつかの例を提供することができれば、私は本当にそれをいただければ幸いです。

4

2 に答える 2

7

グリッドの最も基本的な操作の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 &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"];
}

このようにして、サーバー側で必要なすべてのデータを処理できます

于 2012-05-03T10:48:36.573 に答える
3

私は解決策を見つけました。次の関数は、必要なデータを提供します。

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

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

同じ問題を抱えている/抱えている人のために。

の「インデックス」を変更

Index.GetSelectedFieldValues("Id", OnGetSelectedFieldValues); 

グリッドビューに名前を付けたものに変更し、「Id」を取得する列に変更します。

1つの行から複数​​のデータを取得することもできます。これを行うにはfunction OnGetSelectedFieldValues(result)、次のように別のforループを追加する必要があります。

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);

これが将来、他のユーザーの役に立つことを願っています。

于 2012-04-13T08:35:12.083 に答える