2012-04-12 62 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);

我希望這會對未來的其他用戶有所幫助。

相關問題