2016-09-26 13 views
0

내 cshtml 파일은 모델 내에서 일부 bool 값을받습니다 (+ 데이터는 webgrid를 작성합니다). bool 값에 따라 일부 webgrid 열이 표시되어야하고 일부는 숨겨져 있어야합니다. 예를 들어, Name, Surname, Job 열은 webgrid에 있지만 SurnameBool = 0입니다. 즉 NameJob 열만 표시해야합니다. 다른 답변에서 코드를 사용하려고 시도했지만 불행히도 JavaScript의 초보자입니다. @if(ColumnNameBool) 결과를 바탕으로 webgrid 내의 열에 CSS display : none 속성을 추가하는 방법을 알려주십시오.ASP.NET mvc webgrid 열을 숨기기

WebGrid grid = new WebGrid(item2.ListOfWorkData, canSort: false, rowsPerPage: 15); 

<div id="divWebGrid" class="row"> 
    @if (item2.ListOfWorkData.Any()) 
    { 
     @grid.GetHtml(
          tableStyle: "table", 
          headerStyle: "table_HeaderStyle", 
          footerStyle: "table_PagerStyle", 
          rowStyle: "table_RowStyle", 
          alternatingRowStyle: "table_AlternatingRowStyle", 
          selectedRowStyle: "table_SelectedRowStyle", 
          columns: grid.Columns(
           grid.Column("ProjectName", @Resources.Localization.project, format: @<text> 
            @if (Model.ColumnsNeeded.ProjectNameBool) 
            { 
             <span class="display-mode"><label id="ProjectNameLabel">@item.ProjectName</label></span> 
            } 
           </text>,style : "hidden-column"), 
           grid.Column("Activity", @Resources.Localization.activity, format: @<text> 
            @if (Model.ColumnsNeeded.ActivityBool) 
            { 
             <span class="display-mode"><label id="ActivityLabel">@item.Activity</label></span> 
            } 
           </text>, style: "p60"), 
           grid.Column("ProjectEndDate", @Resources.Localization.start_date, format: @<text> 
            @if (Model.ColumnsNeeded.ProjectStartDateBool) 
            { 
             <span class="display-mode"><label id="ProjectStartDate">@item.ProjectStartDate</label></span> 
            } 
           </text>, style: "p60"), 
           grid.Column("ProjectEndDate", @Resources.Localization.end_date, format: @<text> 
            @if (Model.ColumnsNeeded.ProjectEndDateBool) 
            { 
             <span class="display-mode"><label id="ProjectEndDate">@item.ProjectEndDate</label></span> 
            } 
           </text>, style: "p60") 
          ) 
        ) 
    } 
당신은 널 (null) 소스와 그리드를 만들어야합니다
+0

당신이 방법을 쓸 수 @if (ColumnNameBool) – vamsi

+0

은 webgrid – MikkaRin

+0

의 코드를 추가하십시오 {열을 렌더링} 같은 내가 지금까지 그런 결정을 만난 적이없는 시도 할 수 있습니다 내가해야 열을 직접 가리 키시겠습니까? –

답변

1

:

WebGrid grid = new WebGrid<Your item type>(null, canSort: false, rowsPerPage: 15); 

소스 그리드는 바인딩 :

var gridColumns = new List<WebGridColumn>(); 
@if(ColumnNameBool) 
{   
     gridColumns.Add(grid.Column("ProjectName", 
         @Resources.Localization.project, format: @<text> 
           @if (Model.ColumnsNeeded.ProjectNameBool) 
           { 
            <span class="display-mode"> 
            <label id="ProjectNameLabel"> 
            @item.ProjectName</label> 
            </span> 
           } 
          </text>,style : "hidden-column")); 
       ) 
      //... add other required columns here 
} 
else 
{ 
     //create here another list of columns that required 
     gridColumns.Add(...); 

} 
:

grid.Bind(item2.ListOfWorkData, rowCount: <total row count>, autoSortAndPage: false); 

가 ColumnNameBool의 가치를 따라 열 당신의 세트 만들기

마지막으로 할당 그리드에 열 목록 :

@grid.GetHtml(<styles>, columns: gridColumns.ToArray()); 
+0

아마 나를 위해 일하지 않을 것이다, 나는 내 테이블에 약 40+ 칼럼을 가지게 될 것이지만, 그것들의 모든 조합을 쓰는 것은 불가능하지만 감사한다. –

+1

@ Vadim.K 답변이 업데이트되었습니다. 작동해야합니다. – MikkaRin