2013-04-17 36 views
1

我正在使用Kendo UI Web for asp.net mvc。我通過一個網格命令按鈕生成一個彈出窗口。在彈出窗口關閉後,我想要刷新網格。彈出窗口關閉後刷新Kendo Grid

在彈出的窗口關閉事件:

​​

網格此時不確定的。

劍道窗口定義:

@(Html.Kendo().Window() 
    .Name("Rates") 
    .Title("Rates") 
    .Visible(false) 
    .Modal(true) 
    .Draggable(true) 
    .Width(850) 
    .Height(1200) 
    .Events(x => x.Close("ClosingRateWindow")) 
) 

JavaScript打開的窗口(局部視圖返回):

wnd.refresh({ 
    url: BASE_APP_URL + "ContractRateAdmin/OpenContractRate/", 
    data: { data: data }, 
    traditional: true 
}); 
wnd.center(); 
wnd.open(); 

電網定義:

@(Html.Kendo().Grid<TMS.MVC.TIMS.Models.Admin.Contract.ContractOrderEventGridModel>() 
.Name("ContractDetailOrderEventGrid") 
.Columns(columns => 
{ 
    columns.Command(o => 
    { 
     o.Destroy(); 
     o.Edit(); 
    }).Width(100).Title("Commands"); 

    columns.Command(command => 
     { 
      command.Custom("Rates").Click("ShowRates"); 
     }).Title("Rates").Width(120); 
    columns.Bound(o => o.ContractId).Hidden(true); 
    columns.Bound(o => o.OrderTypeId).Hidden(true); 
    //columns.Bound(o => o.ActiveRateMissing).Width(70).Title("Missing Rates?"); 
    columns.Bound(o => o.OrderLevelFlag).Width(50).Title("Order Level").EditorTemplateName("ContractOE_OrderLevelFlag"); 
    columns.Bound(o => o.Active).Width(80).Title("Active").EditorTemplateName("ContractOE_Active"); 
    columns.Bound(o => o.InvoiceDescription).Width(150).Title("Invoice Desc"); 
    columns.Bound(o => o.SourceContainerOwnerNameDisplay).Width(150).Title("Src Cont Owner").EditorTemplateName("ContractOE_SourceContainerOwner"); 
    columns.Bound(o => o.DestContainerOwnerNameDisplay).Width(150).Title("Dest Cont Owner").EditorTemplateName("ContractOE_DestContainerOwner"); 
    columns.Bound(o => o.SourceContainerTypeName).Width(150).Title("Src Cont Type").EditorTemplateName("ContractOE_SourceContainerTypeName"); 
    columns.Bound(o => o.DestContainerTypeName).Width(150).Title("Dest Cont Type").EditorTemplateName("ContractOE_DestContainerTypeName"); 
    columns.Bound(o => o.SourceContainerName).Width(150).Title("Src Container").EditorTemplateName("ContractOE_SourceContainerName"); 
    columns.Bound(o => o.DestContainerName).Width(150).Title("Dest Container").EditorTemplateName("ContractOE_DestContainerName"); 
    columns.Bound(o => o.EventAliasName).Width(150).Title("Event").EditorTemplateName("ContractOE_EventAliasName"); 
    columns.Bound(o => o.ProductName).Width(150).Title("Product").EditorTemplateName("ContractOE_ProductName"); 
    columns.Bound(o => o.OrderByNameDisplay).Width(150).Title("Order By").EditorTemplateName("ContractOE_OrderBy"); 
    columns.Bound(o => o.OrderTypeName).Width(150).Title("Order Type").EditorTemplateName("ContractOE_OrderTypeName"); 
    columns.Bound(o => o.EmployeeDisplay).Width(150).Title("Employee").EditorTemplateName("ContractOE_EmployeeDisplay"); 
    columns.Bound(o => o.CarrierName).Width(150).Title("Carrier").EditorTemplateName("ContractOE_CarrierName"); 
}) 
    .Events(e => e 
     .Save("Contract_Save") 
     //.Remove("ContractOrderEventGrid_Remove") 
     .DataBound("Contract_DataBound")) 
    .Scrollable(scrolling => scrolling.Enabled(true).Height("300px")) 
    .ToolBar(toolbar => { 
      if (Model.DetailModel.ContractAdminDetailPermissionModel.AddOrderEvent_Button_Visible == true) 
       toolbar.Create().Text("Add"); 
    }) 
    .HtmlAttributes(new { style = "width: 1200px" }) 
    .Editable(editable => editable.Mode(GridEditMode.InLine)) 
    .Sortable(sorting => sorting.Enabled(true)) 
    .Pageable(paging => paging.Enabled(false)) 
    .Resizable(resizing => resizing.Columns(true)) 
    .Filterable(filtering => filtering.Enabled(true)) 
    .Groupable(grouping => grouping.Enabled(true)) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Model(model => 
     { 
      model.Id(p => p.ContractOrderEventId); 
      model.Field(x => x.ActiveRateMissing).Editable(false); 
      model.Field(x => x.ContractId).Editable(false); 
      model.Field(x => x.OrderTypeId).Editable(false); 
      model.Field(x => x.Active).Editable(true).DefaultValue("Y"); 
      model.Field(x => x.OrderLevelFlag).Editable(true).DefaultValue("N"); 
      model.Field(x => x.InvoiceDescription).Editable(true).DefaultValue("Enter Invoice Description"); 
      model.Field(x => x.SourceContainerOwnerNameDisplay).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.DestContainerOwnerNameDisplay).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.SourceContainerTypeName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.DestContainerTypeName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.SourceContainerName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.DestContainerName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.EventAliasName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.ProductName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.OrderByNameDisplay).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.OrderTypeName).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.EmployeeDisplay).Editable(true).DefaultValue("ALL"); 
      model.Field(x => x.CarrierName).Editable(true).DefaultValue("ALL"); 
     }) 
      .Events(x => 
      { 
       // x.RequestEnd("RefreshContractDetailOrderEventGrid"); 
       //x.Error("ContractDetailOrderEventGrid_Error"); 
      }) 
     .Create(update => update.Action("CreateContractOrderEvent", "ContractGrid", new { selectedContractId = Model.DetailModel.ContractId })) 
     .Read(read => read.Action("ReadContractOrderEvent", "ContractGrid", new { contractId = Model.DetailModel.ContractId })) 
     .Update(update => update.Action("UpdateContractOrderEvent", "ContractGrid", new { contractId = Model.DetailModel.ContractId })) 
     .Destroy(update => update.Action("DestroyContractOrderEvent", "ContractGrid")) 
    )) 

如何做任何想法這個?

回答

1

你可以試試;

function ClosingRateWindow(e) { 
    var grid = $('#ContractDetailOrderEventGrid').data("kendoGrid"); 
    grid.refresh(); 
} 
+0

可變網格未定義。 – Elim99

+0

你可以發佈你的網格定義。 – NunoCarmo

+0

我已將網格定義添加到原始帖子。 – Elim99

2

基本上你需要使用窗口的close事件和網格的刷新方法或我猜你需要使用,這將刷新電網:)

的數據dataSource.read()方法
wnd.bind('close',function(){ 
    $('#Rates').data().kendoGrid.dataSource.read(); // or 
    $('#Rates').data().kendoGrid.refresh(); 
}) 
+0

這就是我正在做的。網格在關閉函數中是未定義的。可能由於它沒有在彈出窗口中存在啓動它的網格。 – Elim99

+0

它是如何未定義的?如果它可見(已初始化),您應該可以訪問它。 –

+0

網格不在費率彈出窗口中。彈出窗口是從我希望更新的這個網格上的按鈕啓動的。在彈出關閉時,網格是不確定的據我所知,因爲我不能在JavaScript中引用正常。 $( '#ContractDetailOrderEventGrid')的數據( 「kendoGrid」)。 – Elim99

2

grid變量在彈出窗口中是未定義的,因爲它是在父窗口中定義的; 所以你需要做到以下幾點:

var grid = window.parent.$("#grid").data("kendoGrid"); 
grid.dataSource.read() 
1

\我看到了很多在這裏關注的是未定義的錯誤響應。我試圖在這裏做同樣的事情。我對問題的解決是一個功能附加到編輯器窗口:

.Editable(a => a.Mode(GridEditMode.PopUp).Window(q => q.Title("New Stage").Events(e => e.Close("UpdateStages")))) 

然後該函數被調用的關閉事件是:

function UpdateStages() { 
    $("#StagesForCourse").data("kendoGrid").dataSource.read(); 
} 

我不擔心試圖採取在變量中,而是我直接調用網格並告訴它讀取數據源

0

我知道這個答案可能晚了。但是,如果您從其他網址獲取內容。你需要設置.Iframe(true)。經過數小時的調試後發現這一點。他們的文件確實很差。