【问题标题】:ASP.NET mvc hiding webgrid columnsASP.NET mvc 隐藏 webgrid 列
【发布时间】:2016-09-26 14:45:14
【问题描述】:

我的 cshtml 文件在模型中接收一些 bool 值(+data 以构建 webgrid)。根据 bool 值,必须显示一些 webgrid 列并隐藏一些列,例如我有: NameSurnameJob webgrid 中的列,但我有 SurnameBool = 0,这意味着只有 NameJob 列必须显示。我曾尝试使用其他答案中的代码,但不幸的是我是 JavaScript 的新手,所以请你建议我如何根据 @if(ColumnNameBool) 结果将 css display : none 属性添加到 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")
                             )
                     )
    }

【问题讨论】:

  • 你能试试@if(ColumnNameBool){ render column }
  • 请添加您的 webgrid 的代码
  • 我从来没有遇到过这样的决定,请问我应该如何直接指向列?

标签: javascript c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您应该使用 null 源创建网格:

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

将网格与源绑定:

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

根据 ColumnNameBool 值创建列集:

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.GetHtml(<styles>, columns: gridColumns.ToArray());

【讨论】:

  • 可能它对我不起作用,我的表中将有大约 40 多列,不可能写出它们的所有组合,但谢谢。
猜你喜欢
  • 2017-07-06
  • 2016-04-04
  • 2016-11-26
  • 1970-01-01
  • 2013-01-07
  • 2013-10-15
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多