2017-10-02 15 views
1

이 예가 있는데 열거 형을 사용하여 숫자 값을 문자열 값으로 변경하려고합니다. .ClientTemplate 및 .EditorTemplateName과 같은 몇 가지 메서드를 시도했습니다. 열의 서식을 지정하려면 어떻게 열거 형을 사용할 수 있습니까? 다음은 그리드 예입니다Kendo Grid UI Html 도우미 열 값에 대한 대체 열

@(Html.Kendo().Grid<TelerikAspNetCoreApp2.Models.OrderViewModel>() 
      .Name("grid") 
      .Columns(columns => 
      { 
       columns.Bound(p => p.OrderID).Filterable(false); 
       columns.Bound(p => p.Freight).EditorTemplateName("Test"); //This is the value to change 
       columns.Bound(p => p.OrderDate).Format("{0:MM/dd/yyyy}"); 
       columns.Bound(p => p.ShipName).Filterable(f => f.UI("shipName")); 
       columns.Bound(p => p.ShipCity).Filterable(f => f.UI("shipCity")); 
      }) 
      .Pageable() 
      .Sortable() 
      .Scrollable() 
      .Navigatable() 
      .Pageable() 
      .Scrollable() 
      .Filterable() 
      .HtmlAttributes(new { style = "height:550px;" }) 
      .DataSource(dataSource => dataSource 
       .Ajax() 
       .PageSize(20) 
       .Read(read => read.Action("Orders_Read", "Grid")) 
      ) 
     ) 
    .... 
    @functions { 
    public string UseEnum(string x) 
    { 
     return Enum.Parse(typeof(TelerikAspNetCoreApp2.Enums.Test), x).ToString(); 
    } 
} 

그리고 이것은 예를 열거

public enum Test 
{ 
    zero = 0, 
    one = 10, 
    two = 20, 
    three = 30, 
    four = 40, 
    five = 50 
} 

public static List<SelectListItem> EnumToSelectList(Type enumType) 
     { 
      return Enum 
       .GetValues(enumType) 
       .Cast<int>() 
        .Select(i => new SelectListItem 
        { 
         Value = i.ToString(), 
         Text = Enum.GetName(enumType, i), 
        } 
      ) 
       .ToList(); 
     } 
     @functions { 
    public string UseEnum(string x) 
    { 
     return Enum.Parse(typeof(TelerikAspNetCoreApp2.Enums.Prova), x).ToString(); 
    } 
} 

답변

1

입니다 당신은 "EditorTemplates"다음 부분을 만들 때 해당 컨트롤러와 이름을 위해 내부보기 폴더를 추가 할 수 있습니다 "시험"에 대한보기. 해당 필드에 대한 사용자의 컨트롤이되며 해당 뷰를 EditorTemplate 부분 뷰에 매핑하므로 그리드로 뷰를 호출 할 때마다 ViewBag.EnumTest을 추가하십시오.

이 부분을 "테스트"부분보기에 넣습니다.

@(Html.Kendo().ComboBox() 
    .Filter("contains") 
    .BindTo(ViewBag.EnumTest) 
    .Placeholder("Select Freight") 
    .HtmlAttributes(new { @id = "Freight", @name = "Freight"}) 
    .Name("Freight") 
) 

ViewBag.EnumTest = EnumToSelectList; 그래서 콤보 상자에 사용됩니다 SelectListItem이있을 것이다.

또는 수동으로 콤보 상자를 채울 수 있습니다.

@{ 
    List<SelectListItem> EnumTest = new List<SelectListItem> 
    { 
     new SelectListItem 
     { 
      Value = "0", 
      Text = "zero " 
     }, 
     new SelectListItem 
     { 
      Value = "10", 
      Text = "one" 
     }, 
     new SelectListItem 
     { 
      Value = "20", 
      Text = "two" 
     }, 
     new SelectListItem 
     { 
      Value = "30", 
      Text = "three" 
     }, 
     new SelectListItem 
     { 
      Value = "40", 
      Text = "four" 
     }, 
     new SelectListItem 
     { 
      Value = "50", 
      Text = "five" 
     } 
    }; 
} 

@(Html.Kendo().ComboBox() 
    .Filter("contains") 
    .BindTo(EnumTest) 
    .Placeholder("Select Freight") 
    .HtmlAttributes(new { @id = "Freight", @name = "Freight"}) 
    .Name("Freight") 
) 
+0

나는 그것을했으나 여전히 작동하지 않습니다. EnumToSelectList 메소드는 열거 형을 가진 외부 클래스에 있습니다. 그리드 열의 바운더리에 EditorTemplateName ("Test")을 추가했지만 여전히 작동하지 않습니다. –

+0

'ViewBag.EnumTest'에'SelectListItem'의리스트를 수동으로 채우고 다시 테스트 해보십시오. –

+0

업데이트 된 답변을 사용해보십시오. –