2012-11-21 3 views
1

사용자 지정 개체를 사용하는 표시 템플릿이 포함 된 검도 그리드가 있습니다. 그룹화 및 정렬을 허용하기 위해 IComparable을 구현했지만 필터링 기능을 작동 시키려면 무엇을해야하는지 잘 모르겠습니다. 그대로, 열에 대한 필터 단추를 클릭하면 일반적으로 '포함, 시작, 같음'및 일반적으로 표시되는 옵션 대신 빈 드롭 다운이 나타납니다. 나는 ToDataSourceResult을 사용하여 결과를 조작하고 있습니다.사용자 지정 개체에서 검도 그리드 필터링

모델 :

public class LEAProgramMap 
{ 
    public string entity_program { get; set; } 
    [UIHint("ProgramEditor")] 
    public ProgramDDL program_desc { get; set; } 
} 

드롭 다운 :

public class ProgramDDL : IComparable 
{ 
    public short program_id { get; set; } 
    public string entity_program { get; set; } 
    public string program_desc { get; set; } 
    public int CompareTo(object obj) 
    { 
     if (obj is ProgramDDL) 
     { 
      ProgramDDL rev2 = (ProgramDDL)obj; 
      return program_desc.CompareTo(rev2.program_desc); 
     } 
     else 
      throw new ArgumentException("Object is not a ProgramDDL"); 
    } 
} 

하고 뷰 :

@model IEnumerable<Datamart.Models.ViewModels.LEAProgramMap> 

@{ 
    ViewBag.Title = "CreateProgramMap"; 
    var snapshot = Session["snapshot_id"] ?? Request.Params["snapshot_id"]; 
} 

<h2>CreateProgramMap</h2> 
@(Html.Kendo().Grid(Model) 
.Name("Programs") 
.Columns(cols => 
    { 
     cols.Bound(p => p.entity_program).ClientTemplate("#=entity_program#"); 
     cols.Bound(p => p.program_desc).ClientTemplate("#=program_desc.program_desc#"); 
    }) 
.ToolBar(commands => 
    { 
     commands.Save(); 
    }) 
.Editable(edit => edit.Enabled(true).Mode(GridEditMode.InCell)) 
.DataSource(ds => ds 
      .Ajax() 
      .Model(model => 
       { 
        model.Id(p => p.entity_program); 
        model.Field(p => p.entity_program).Editable(false); 

       }) 
    // Configure RU --> 
       .Read(read => read.Action("Program_Read", "Draft").Data("additionalData")) 
       .Update(update => update.Action("Program_Update", "Draft").Data("additionalData")) 
    //.ServerOperation(false) 
       .Batch(true) 
       .Events(events => events 
        //.Change("onChange") 
        .Error("onError") 
        ) 
       ) 
     // <-- Configure RU 
     .Pageable(page => page.PageSizes(new int[] { 10, 25, 50, 100 }).Enabled(true)) 
     .Groupable(group => group.Enabled(true)) 
     .Filterable(filter => filter.Enabled(true).Extra(true)) 
     .Sortable(sort => sort.Enabled(true).SortMode(GridSortMode.SingleColumn).AllowUnsort(true)) 
     .Navigatable(nav => nav.Enabled(true)) 
     .Resizable(resizing => resizing.Columns(true)) 
     .Reorderable(reorder => reorder.Columns(true)) 
      ) 

<script> 
function additionalData() { 
    return { 
     snapshot_id: "@snapshot" 
    }; 
} 

function onError(e, status) { 
    if (e.errors) { 
     var message = "The following errors have occurred:\n"; 

     $.each(e.errors, function (key, value) { 
      if (value.errors) { 
       message += value.errors.join("\n"); 
      } 
     }); 

     alert(message); 
    } 
} 

function onChange() { 
    var grid = $("#Programs").data("kendoGrid"); 

    grid.dataSource.read(); 
} 
</script> 

답변

1

불행하게도 검도 UI가 지원하지 않는 클래스의 구성 /보기 모델이 포함 된 복잡한 객체 예기치 않은 동작을 피하려면 View Model을 완전히 평평하게해야합니다. 그래서 당신의 수업은 이렇게 보일 것입니다.

public class LEAProgramMap 
{ 
    public string entity_program { get; set; } 
    public short program_id { get; set; } 
    public string entity_program { get; set; } 
    public string program_desc { get; set; } 
} 
+0

그래서 현재 필터링을 제외한 모든 것에 내 현재보기 모델을 사용할 수 있습니까? 기능 요청을 추가해야 할 것입니다. 사용자 정의 리졸버에서 모든 기능을 구현할 수있는 중요한 기능이라면 이상한 것처럼 보입니다. 클라이언트가 그다지 중요하지 않다고 생각한다면 이제는 그리드 바깥에서 검색을 추가 할 것입니다. 릴리스 이후 더 우아한 솔루션을 찾아 보겠습니다. – Elsimer

+0

처음으로 검도 UI보기 모델이 완전히 평평해야한다는 사실을 우연히 발견했을 때 정렬을 적용하려고 할 때 모형 바인딩이 올바르게 표시되어 데이터를 표시 할 수있는 것 같습니다. DataSourceResult (필터, 정렬, 그룹화 등)를 사용하여 아무 일도하지 않으면 예상치 못한 결과가 나타나는 것으로 보입니다. – SimonGates

+0

나는 IComparable을 구현 한 후에 Kendo에서 복잡한 클래스로 정렬 할 수있었습니다. 템플릿을 사용하고 있기 때문에 그룹화가 가능합니까? – Elsimer

관련 문제