【问题标题】:ASP MVC DevExpress: GridViewSettings in Controller rather than ViewASP MVC DevExpress:控制器而不是视图中的 GridViewSettings
【发布时间】:2016-10-27 20:23:06
【问题描述】:

我刚开始使用 DevExpress 使用 ASP MVC,我已经创建了内部包含 GridViews 的视图,并且我在局部视图中进行了设置。

短篇小说

我需要将 GridViewSettings 对象放在控制器而不是视图中。 为什么?因为应用程序需要下载网格的 Excel 文件,所以到目前为止这是我见过的唯一方法。但问题是,控制器中的网格设置不允许我在未绑定的列中指定标签。

代码如下:

    public GridViewSettings MyGridSettings()
    {
        var settings = new GridViewSettings();
        settings.Name = "MyGrid";

        settings.CommandColumn.Visible = true;

        settings.KeyFieldName = "PERSON_ID";

        settings.SettingsPager.Visible = true;
        settings.Settings.ShowGroupPanel = true;
        settings.Settings.ShowFilterRow = true;
        settings.SettingsBehavior.AllowSelectByRowClick = true;

        settings.SettingsAdaptivity.AdaptivityMode = GridViewAdaptivityMode.HideDataCellsWindowLimit;
        settings.SettingsAdaptivity.AdaptiveColumnPosition = GridViewAdaptiveColumnPosition.Right;
        settings.SettingsAdaptivity.AdaptiveDetailColumnCount = 1;
        settings.SettingsAdaptivity.AllowOnlyOneAdaptiveDetailExpanded = false;
        settings.SettingsAdaptivity.HideDataCellsAtWindowInnerWidth = 0;

        settings.Columns.Add("PERSON_ID", "Person ID");

        settings.Columns.Add(col =>
        {
            col.Caption = "Department";
            col.SetDataItemTemplateContent(dataTemplate =>
            {
                String DepartmenID = (String)DataBinder.Eval(dataTemplate.DataItem, "DEPARTMENT_ID");

                    //if (DepartmenID != null)
                    //{
                    //  Html.DevExpress().Label(label =>
                    //    {
                    //        label.Text = String.Format("{0}",
                    //             DataBinder.Eval(dataTemplate.DataItem, "DEPARTMENT.NAME"));
                    //    }).Render();
                    //  }
            }
        }
    }

小问题

如何从控制器访问以下代码?

Html.DevExpress().Label(label =>
    {
        label.Text = String.Format("{0}",
             DataBinder.Eval(dataTemplate.DataItem, "DEPARTMENT.NAME"));
    }).Render();

就像我说的那样,我需要这样做,因为 Excel 文件下载。不过,如果您有任何我不需要这样做的解决方法,那就太好了

【问题讨论】:

    标签: asp.net-mvc devexpress devexpress-mvc


    【解决方案1】:

    使用HtmlHelper 描述here 的类(阅读使用HtmlHelper 类 部分),这段代码可能会解决您的问题:

    public GridViewSettings MyGridSettings(this HtmlHelper html)
    {
        var settings = new GridViewSettings();
        settings.Name = "MyGrid";
    
        // simplified for brevity
    
        settings.Columns.Add(col =>
        {
            col.Caption = "Department";
            col.SetDataItemTemplateContent(dataTemplate =>
            {
                String DepartmentID = (String)DataBinder.Eval(dataTemplate.DataItem, "DEPARTMENT_ID");
    
                if (DepartmentID != null)
                {
                    html.DevExpress().Label(label => 
                    {
                        label.Text = String.Format("{0}", DataBinder.Eval(dataTemplate.DataItem, "DEPARTMENT.NAME"));
                    }).Render();
                }
            }
        }
    
        return settings;
    }
    

    与视图不同,控制器动作默认不引用HtmlHelper,因此您需要在GridViewSettings 方法中包含HtmlHelper 类来创建HTML 辅助扩展。

    如果您的 DataItemTemplateContent 无法按设计导出,请尝试使用 How to convert and then print an GridView extension by using the XtraReport example 将 GridView 内容导出到 XtraReport。

    其他参考资料:

    Grid View Exporting - 1

    Grid View Exporting - 2

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2011-10-25
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多