2012-04-12 47 views
4

我使用ASP.NET C#MVC3与剃刀模板,我想知道以下内容:如何将选定的GridView行放入JavaScript变量中?

我有一个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,我试了一下与GetSelectedFieldValuesCallback和GetSelectedFieldValues。但是这不符合我的期望。 如果有人可以提供一些例子,我会非常感激。

回答

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"]; 
} 

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

数据
+0

+1用于避免回拨。 – manadart 2013-02-14 21:18:04

+0

我完全不同意你的解决方案。因为按照[GetSelectedFieldsOnPage](https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewScriptsASPxClientGridView_GetSelectedKeysOnPagetopic)_和我自己对此函数的测试,它只会选择在该页面上选择的行。例如,如果您的网格在由pageSize标记的15个页面中显示记录,那么您将仅获得第一页的选定行。如果您需要在所有页面上获取选定的行,那么您将需要该函数** GetSelectedFieldValues **。 – 2014-03-01 05:01:20

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

我希望这会对未来的其他用户有所帮助。