DevExpress MVC Gridview - PullRequest
       65

DevExpress MVC Gridview

0 голосов
/ 05 октября 2018

Добрый день, ребята, я пытаюсь добавить дополнительный столбец в виде сетки с этим кодом.Но когда я запускаю это.Я не могу нажать кнопку в виде сетки.Понял, что я делаю не так.Спасибо

        settings.Columns.Add(column =>
        {
            column.FieldName = "Unbound";
            column.Caption = "Action";
            column.UnboundType = DevExpress.Data.UnboundColumnType.Object
            column.EditFormSettings.Visible = DevExpress.Utils.DefaultBoolean.True;
            column.ReadOnly = false;
            column.SetDataItemTemplateContent((c) =>
            {

                Html.DevExpress().Button(b =>
                {
                    b.Name = "btnVE" + c.KeyValue;
                    b.Text = "V/E";
                    b.ClientSideEvents.Click =
                    "function(s, e) { document.location='" + DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" })
                    + "?key=' + s.GetRowKey(e.visibleIndex); }";

                }).GetHtml();
            });
        });

        settings.Columns.Add("Id");
        settings.Columns.Add("Code");
        settings.Columns.Add("CompanyId");
        settings.Columns.Add("Description");
        settings.Columns.Add("ContactPerson");
        settings.Columns.Add("TelNo");
        settings.Columns.Add("Notes");

Обновление: я обнаружил ошибку в Интернете с помощью инструментов веб-разработчика, но я не знаю, как ее исправить Ошибка при наведении курсора

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Нашел проблему.По-видимому, это должно быть размещено в передней части вида перед созданием вида сетки.Но я думал, что это должен быть JScript.Он должен работать асинхронно.Ооо хорошо, пока это работает.Спасибо за помощь @ tetsuya

 @Html.DevExpress().GetStyleSheets(
        new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
        new StyleSheet { ExtensionSuite = ExtensionSuite.Editors, ExtensionType = ExtensionType.Button },
        new StyleSheet { ExtensionSuite = ExtensionSuite.GridView }

    )
    @Html.DevExpress().GetScripts(
        new Script { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
        new Script { ExtensionSuite = ExtensionSuite.Editors, ExtensionType = ExtensionType.Button },
        new Script { ExtensionSuite = ExtensionSuite.GridView }
    )
0 голосов
/ 05 октября 2018

Похоже, что проблема возникла из s, который назначен отправителю кнопки в этом блоке вместо GridView строка:

Html.DevExpress().Button(b =>
{
    b.Name = "btnVE" + c.KeyValue;
    b.Text = "V/E";
    b.ClientSideEvents.Click =
    "function(s, e) { document.location='" + DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" })
    + "?key=' + s.GetRowKey(e.visibleIndex); }"; // ==> 's' refers to button object as sender
}).GetHtml();

То, что вы должны использовать, это GridViewDataItemTemplateContainer объект, чтобы получить KeyValue свойство для соответствующей строки, которое возвращает целочисленное значение из GridViewBaseRowTemplateContainer:

column.SetDataItemTemplateContent((c) =>
{
    Html.DevExpress().Button(b =>
    {
        b.Name = "btnVE" + c.KeyValue;
        b.Text = "V/E";
        b.UseSubmitBehavior = false; // prevent default submit action
        b.EnableClientSideAPI = true; // add this line if not sure
        b.ClientSideEvents.Click =
        "function(s, e) { window.location = '" + DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" })
        + "?key=" + c.KeyValue.ToString() + "'; }";

    }).GetHtml();
});

или с использованием string.Format(), который легче читать:

b.ClientSideEvents.Click = string.Format("function(s, e) {{ window.location = '{0}?key={1}'; }}", 
                           DevExpressHelper.GetUrl(new { Controller = "ViewPrincipal", Action = "EditRecord" }), 
                           c.KeyValue.ToString());

Примечания:

1) Если вы хотите получить индекс строки, используйте c.VisibleIndex.

2) Для кросс-браузерной работы я предпочел от window.location до document.location, как указано здесь .

Проблема, связанная с данной: GridView - Как определить кнопку внутри сетки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...