2014-10-20 101 views
1

下面是劍道電網後劍道網格值

@(Html.Kendo().Grid<CS.Web.Models.People.GroupDetailModel>() 
    .Name("Grid") 
    .Events(e => e.DataBound("LineItems_Databound")) 
    .HtmlAttributes(new { style = "overflow:hidden;", @class = "normalgrid" }) 
    .Columns(columns => 
    { 
     columns.Bound(p => p.GroupID).Hidden(); 
     columns.Bound(p => p.GroupName).Title("Group Name").Width(30); 
     columns.Bound(p => p.Department).Title("Department Name").Width(30); 
     columns.Bound(p => p.IsBlindSettingsEnable).Title("Blind Group") 
     .ClientTemplate("<input type=\"checkbox\" #= IsBlindSettingsEnable ? \"checked=checked\": \"\" # enabled=\"enabled\" />") 
     .Width(30); 
     columns.Bound("Department").Title("Remove") 
     .ClientTemplate("<a href='javascript:void(0)' Title='Remove' onclick='return removeUserGroupRelation(+#=GroupID#+);'> <img alt='Remove' src='" + @Url.Content("~/Content/Images/delete_icon.png") + "' /></a>") 
     .Width(30); 
    }) 
    .Sortable() 
    .Scrollable(scrollable => scrollable.Virtual(false)) 
    .DataSource(dataSource => dataSource 
    .Ajax() 
    .Read(read => read.Action("getAssignedGroups", "People") 
     .Data("setRoutesValues") 
    ) 

    //new { MerchantId = ViewBag.MerchantId, StartDate = Model.StartDate, EndDate = Model.EndDate } 
           ) 
    .TableHtmlAttributes(new { @class = "grid_1" }) 
) 

下面是javascript代碼

var userID = '@ViewBag.UserID' 
$.ajax({ 
    url: '@Url.Action("SaveGroupsUserDetails")', 
    type: "POST", 
    dataType: "json", 
    data: { models: kendo.stringify($("#Grid").data("kendoGrid").dataSource.view()), UserID: userID }, 
    success: function (result) { 
    } 
}); 

在這裏,在我的劍道格有複選框column.When我選中或取消選中複選框在客戶SIED (在瀏覽器中)。並且通過給javascript $ .ajax發佈帖子,它不會發布我在客戶端瀏覽器中更改過的複選框的值,它顯示了它從服務器端綁定的值。

所以,我的問題是我想要更新的值在服務器上發佈,並在客戶端瀏覽器上進行修改。

如果你給我答案,我會非常感謝。

回答

0

我相信這是因爲你看着dataSource的實際價值而不是網格本身。你的網格是不可編輯的。您手動將輸入投入到網格中,這些不會影響數據源。

你可以採取兩種方法做這種更新。


您可以按照您設置的方式離開網格並僅通過Java腳本處理此更新。 要做到這一點,您需要查找所有需要使用JQuery手動更新的數據項。

您可以查看所有檢查框,並在該網格中進行檢查,然後手動獲取相關數據項。這裏是一個簡短的例子,展示瞭如何從網格中的一行獲取數據項。

//checkbox is a JQuery object referencing one of your checkboxes 
var row = $(checkbox).closest("tr"); 
var grid = $("#grid").data("kendoGrid"); 
var data = grid.dataItem(row); 

一旦你有所有你的dataItems是相關的,你可以發佈你的更新。然後您必須重新加載網格才能獲取這些項目的更新狀態。

總的來說,這不是使用劍道網格進行這種更新的首選方式。


我建議這第二種方法。

這是我會從拉動例子網站:http://demos.telerik.com/aspnet-mvc/grid/editing

首先,你需要讓你的劍道網編輯.Editable(editable => editable.Mode(GridEditMode.InCell))。您將不再需要添加複選框的自定義模板。當您現在編輯網格時,它會自動添加它們。

然後,您需要設置數據源以具有更新功能,並讓您的服務器期待此更新。

你的數據源綁定

.DataSource(dataSource => dataSource   
    .Ajax()   
    .Batch(true)   
    .Read("Editing_Read", "Grid") 
    .Update("Editing_Update", "Grid") 
) 

你的服務器端代碼

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Editing_Update([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<ProductViewModel> products) 
    { 
     if (products != null && ModelState.IsValid) 
     { 
      foreach (var product in products) 
      { 
       productService.Update(product); 
      } 
     } 

     return Json(products.ToDataSourceResult(request, ModelState)); 
    } 

通過返回該JSON對象網格將自動更新到新值。這是編輯網格的首選方式。

1

你應該只在複選框更新您的數據源中選中:

... 
    .ClientTemplate("<input type=\"checkbox\" #= IsBlindSettingsEnable ? \"checked=checked\": \"\" # enabled=\"enabled\" onclick='setChecked(this)' />") 
... 


function setChecked(cb) { 
    var row = $(cb).closest("tr"); 
    var item = grid.dataItem(row); 
    item.IsBlindSettingsEnable = cb.checked; 
} 

,現在你的數據源是同步的觀點