如何将选定的GridView行转换为Javascript变量?

时间:2012-04-12 13:41:47

标签: javascript asp.net-mvc gridview razor devexpress

我使用带有剃刀模板的ASP.NET C#MVC3,我想知道以下内容:

我有一个DevExpress GridView,我可以在其中选择行 选中后,我想将它们传递给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。但这并不像我期待的那样有效。 如果有人可以提供一些例子我会非常感激。

2 个答案:

答案 0 :(得分: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"];
}

这样您就可以处理您想要服务器端的所有数据

答案 1 :(得分: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); 

到你为gridview命名的任何内容,并将“Id”更改为你想要的列。

您也可以从一行获取多个数据,为此,您需要在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);

我希望这将有助于其他用户。