c# - DevExpress MVC GridView

标签 c# asp.net-mvc gridview devexpress devexpress-mvc

大家好 我正在尝试使用此代码在 GridView 上添加一个额外的列。但是当我运行它时。我无法单击 GridView 上的按钮。知道我做错了什么。谢谢

        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");

更新: 我通过网络开发人员工具在网络上发现了该错误,但我不知道如何修复它 Error button hover

最佳答案

听起来问题源自分配给此 block 上的按钮发送者的 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,如 here 所提供的那样。 .

相关问题:GridView - How to define Button inside grid

关于c# - DevExpress MVC GridView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660648/

相关文章:

C#线程,多个线程调用相同的方法访问同一个数组会导致速度变慢吗?

c# - 如何删除 OWIN 中的中间件?

c# - 使用局部 View 时 MVC 模型 Null on post

jquery - 通过 javascript 将额外项目添加到表单

c# - 不可靠的并行循环在 400 次中有 4 次失败

c# - 清除sqldatasource过滤器表达式

android - 如何在 Android 中的 GridView 内的 imageView 上设置布局参数

c# - 统一: Need help how to double click detection in c#?

asp.net-mvc - 在 ASP.NET MVC 中的回发之间持久化复杂数据

asp.net GridView分页器消失了!