2017-09-07 2 views
1

열 헤더 필터가 활성화 된 설명 열이있는 DevExpress gridview가 있습니다. 문제는 이러한 필터를 사용하도록 설정하면 목록의 모든 데이터 항목에 대해 항목이 드롭 다운에 추가되므로 항목이 일반적으로 텍스트 단락이므로 실제로 바람직하지 않습니다. 대신 모든 옵션, 공백 및 비 공백으로 옵션을 제한하고 싶지만이 방법을 수행하는 방법에 대한 명확한 예제를 찾을 수 없었습니다. 도와 주셔서 감사합니다!GridView 헤더 필터 설정

enter image description here

답변 :

settings.HeaderFilterFillItems = (sender, e) => 
{ 
    if (e.Column.FieldName == "Description") 
    { 
     e.Values.Clear(); 
     e.AddShowAll(); 
     e.Values.Insert(1, FilterValue.CreateShowBlanksValue(e.Column, "(Blanks)")); 
     e.Values.Insert(2, FilterValue.CreateShowNonBlanksValue(e.Column, "(Non Blanks)")); 
    } 
}; 
+0

나는 그것이 도움이 되었으면 좋겠다. 내 프로젝트에서 DevExpress를 사용하지만, MVC에서는 DevExtreme, 간단한 컨트롤, 뛰어난 성능, 좋은 샘플 코드 및 지원을 선호한다. –

답변

1

이 질문은, 사용자 정의 필터 항목이 뷰에서 https://www.devexpress.com/Support/Center/Question/Details/Q477323/gridview-how-to-customize-header-filter-items

그리고 여기 당신보다 비슷합니다 사용 settings.HeaderFilterFillItemshttps://demos.devexpress.com/MVCxGridViewDemos/Filtering/Filtering

@Html.DevExpress().GridView(
    settings => { 
     settings.Name = "gvFiltering"; 
     settings.CallbackRouteValues = new { Controller = "Filtering", Action = "FilteringPartial", EnableCheckedListMode = ViewBag.EnableCheckedListMode }; 
     settings.Width = Unit.Percentage(100); 

     settings.Columns.Add("CompanyName"); 
     settings.Columns.Add("Country"); 
     settings.Columns.Add("City"); 
     settings.Columns.Add("UnitPrice").PropertiesEdit.DisplayFormatString = "c"; 
     settings.Columns.Add("Quantity"); 
     settings.Columns.Add("Discount").PropertiesEdit.DisplayFormatString = "p0"; 
     settings.Columns.Add(column => { 
      column.FieldName = "Total"; 
      column.PropertiesEdit.DisplayFormatString = "c"; 
      column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal; 
      column.UnboundExpression = "UnitPrice * Quantity * (1 - Discount)"; 
     }); 

     settings.Settings.ShowHeaderFilterButton = true; 
     settings.SettingsPopup.HeaderFilter.Height = 200; 

     var headerFilterMode = ViewBag.EnableCheckedListMode ? GridHeaderFilterMode.CheckedList : GridHeaderFilterMode.List; 
     foreach(GridViewDataColumn column in settings.Columns) 
      column.SettingsHeaderFilter.Mode = headerFilterMode; 

     settings.HeaderFilterFillItems = (sender, e) => { 
      ASPxGridView grid = (ASPxGridView)sender; 
      if(e.Column.FieldName == "Total") { 
       e.Values.Clear(); 
       if(e.Column.SettingsHeaderFilter.Mode == GridHeaderFilterMode.List) 
       e.AddShowAll(); 
       int step = 100; 
       for(int i = 0; i < 10; i++) { 
        double start = step * i; 
        double end = start + step - 0.01; 
        e.AddValue(string.Format("from {0:c} to {1:c}", start, end), string.Empty, string.Format("[Total] >= {0} and [Total] <= {1}", start, end)); 
       } 
       e.AddValue(string.Format("> {0:c}", 1000), string.Empty, "[Total] > 1000"); 
      } else if(e.Column.FieldName == "Quantity") { 
       int max = 0; 
       for(int i = 0; i < e.Values.Count; i++) { 
        int value; 
        if(!int.TryParse(e.Values[i].Value, out value)) 
         continue; 
        if(value > max) 
         max = value; 
       } 
       e.Values.Clear(); 
       if(e.Column.SettingsHeaderFilter.Mode == GridHeaderFilterMode.List) 
       e.AddShowAll(); 
       int step = 10; 
       for(int i = 0; i < max/step + 1; i++) { 
        int start = step * i; 
        int end = start + step - 1; 
        e.AddValue(string.Format("from {0} to {1}", start, end), string.Empty, string.Format("[Quantity] >= {0} and [Quantity] <= {1}", start, end)); 
       } 
      } 
     }; 
    }).Bind(Model).GetHtml() 
+0

이것은 내 대답에 직접적으로 응답하지 않았다. 질문을하지만 그것은 내가 일하기 위해 필요한 곳으로 나를 가리 키기에 충분한 정보였다. 내가 의도 한 것을 성취하기 위해 사용했던 실제 구현으로 내 질문을 업데이트했습니다. 감사! –