ASP MVC DevExpress: GridViewSettings в контроллере, а не в представлении

Я только начал работать с ASP MVC с помощью DevExpress, я создал представления, внутри которых есть 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. Хотя, если у вас есть обходные пути, где мне не нужно это делать, это было бы здорово


person ggderas    schedule 27.10.2016    source источник


Ответы (1)


Использование класса HtmlHelper описано здесь (см. раздел Использование класса 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 по умолчанию, поэтому вам необходимо включить класс HtmlHelper в метод GridViewSettings для создания вспомогательных расширений HTML.

Если ваш DataItemTemplateContent не может быть экспортирован по дизайну, попробуйте экспортировать содержимое GridView в XtraReport, используя Как преобразовать, а затем напечатать расширение GridView, используя пример XtraReport.

Дополнительные ссылки:

Экспорт представления сетки — 1

Экспорт представления сетки — 2

person Tetsuya Yamamoto    schedule 28.10.2016