2012-11-14 2 views
3

나는 Employees가있는 그리드가 있습니다. 편집 버튼이 있고 편집 모드가 팝업으로 설정되어 있습니다. 편집하려는 엔터티의 EditorTemplate에는 인웰 또는 인라인 편집 모드가있는 급여의 내역이있는 다른 그리드가 있습니다.그리드 팝업 편집기에 그리드 - 하위 그리드에 ID 매개 변수 전달

두 그리드 모두 Ajax 데이터 소스를 사용합니다. 문제는 내부 격자 바인딩입니다. AJAX 호출에 Json 결과를 제공하는 컨트롤러 작업에는 적절한 급여 기록을 반환하기 위해 편집중인 직원의 ID가 필요합니다. 그러나 Kendo UI ASP.NET MVC 래퍼는 어떤 직원을 편집할지 알기 전에 편집기의 일종의 템플릿을 렌더링 한 다음 팝업을 요청할 때 편집합니다.

Read Ajax 호출에서 Employee ID를 어떻게 먹일 수 있습니까?

홈페이지 그리드

@(Html.Kendo().Grid<MyProject.Business.Models.EmployeDTO>().Name("EmployeGrid") 
.ToolBar(toolbar => toolbar.Create()) 
.Columns(cols => 
{ 
    cols.Bound(o => o.someData).Title("Some Data"); 
    cols.Bound(o => o.moreData).Title("More Data"); 
    cols.Command(o => 
    { 
      o.Edit(); 
     o.Destroy(); 
    }).Title("&nbsp;"); 
}) 
.Editable(editor => editor 
    .Mode(GridEditMode.PopUp) 
    .Window(window => window.Draggable().Resizable().HtmlAttributes(new { @style = "width:700px;" }))) 
.Sortable() 
.Filterable() 
.Groupable() 
.DataSource(datasource => datasource 
    .Ajax() 
    .Model(model => model.Id(o => o.id)) 
    .Read(read => read.Action("GetAll", "EmployesAjax")) 
    .Update(update => update.Action("Update", "EmployesAjax")) 
    .Create(create => create.Action("Create", "EmployesAjax")) 
    .Destroy(destroy => destroy.Action("Destroy", "EmployesAjax")) 
    ) 
) 

내부 그리드 (에서/공유/EditorTemplates/EmployeDTO.cshtml 뷰) 나는 당신이 false로 자동 바인드 옵션을 설정하는 것이 좋습니다 것 기본적으로

@Html.Kendo().Grid<MyProject.Business.Models.SalairyDTO>().Name("SalaryGrid") 
.Columns(cols => 
{ 
    cols.Bound(o => o.someInfo).Title("Some Info"); 
}) 
.DataSource(datasource => datasource 
    .Ajax() 
    .Model(model => 
    { 
     model.Id(o => o.id); 
     model.Field(o => o.employe_id).DefaultValue(Model.id); 
    }) 

    // NEED THE ID HERE 
    .Read(read => read.Action("GetByEmployeId", "SalairyAjax", new { id = "" })) 

    .Update(update => update.Action("Update", "SalairyAjax")) 
    .Create(create => create.Action("Create", "SalairyAjax")) 
    .Destroy(destroy => destroy.Action("Destroy", "SalairyAjax")))); 

답변

3

외부 그리드의 편집 이벤트를 사용하여 읽기 요청을 수행하고 그 값을 추가 매개 변수로 전달하십시오.

function onEditOfEmployeGrid(e){ 
    $('#SalaryGrid').data().kendoGrid.dataSource.read({id:e.model.EmployeeID}) 
} 
+0

Wonderful! 고맙습니다! – Pluc

+0

@Pluc이 문제를 해결할 수 있었습니까? 마스터 그리드에서 서브 그리드로 ID를 읽을 수있는 비슷한 문제에 봉착했습니다. 그러나, 내가 만든 '툴바'버튼 안에서 같은 값을 읽을 수 없습니다. 도울 수 있니? – Sarah

+0

@ Sarah 보통 # = Id # (면도기) 만 사용합니다. 내 질문의 날짜를보고, 나는 그 당시 검도를 사용하기 시작했다. 나는이 구문을 왜 사용하지 않았는지 잘 모르겠습니다. 기본값, 필터 또는 강력하게 형식화 된 항목에는 사용할 수 없지만 경로 데이터에 대해서는 다음과 같이 할 수 있습니다. 어느 쪽이든, 툴바에서 사용할 수 있습니다. 더 많은 도움이 필요하시면 샘플로 직접 질문을 시작하십시오! 도움이 될 것입니다. – Pluc

0

당신은 단순히 그리드 내에서 addtionaldata 매개 변수를 사용하여 그리드의 값을 전달할 수 : 여기

은 예입니다. ViewData [ "RouteID"]를 사용하여 그리드 팝업 편집기에서 (왼쪽)의 RouteID를 참조 할 수 있습니다. 도움이 되었으면 좋겠다.

 .Editable(editable => editable.Mode(GridEditMode.PopUp) 
     .TemplateName("busStop") 
     .DisplayDeleteConfirmation(true) 
     .Window(window => window.Modal(true).Resizable().Draggable()) 
     .AdditionalViewData(new { RouteID = Model.RouteID })) 
관련 문제