链接到JQGrid中的外键

时间:2012-03-03 06:36:47

标签: asp.net-mvc-3 entity-framework-4 jqgrid-asp.net

我设计了我的jqgrid viewmodel,如下所示,

public class DomainJQGrid
{
    public JQGrid DomainsGrid { get; set; }

    public DomainJQGrid()
    {
        DomainsGrid = new JQGrid
        {
            Columns = new List<JQGridColumn>()
            {
                new JQGridColumn
                { 
                    DataField = "DomainId",
                    PrimaryKey = true,
                    Editable = false,
                    HeaderText = "Domain ID",
                    Visible = false                        
                },
                new JQGridColumn
                {
                    DataField = "ClientId",
                    Editable = false,
                    Width = 150,
                    HeaderText = "Client"
                },
                new JQGridColumn
                {
                    DataField = "DomainName",
                    Editable = false,
                    Width = 150,
                    HeaderText = "Domain Name"
                },
                new JQGridColumn
                {
                    DataField = "Registered",
                    Editable = true,
                    Width = 100,
                    DataFormatString = "{0:d}",
                    HeaderText = "Registered",
                }

            },
            AutoWidth = true,
        };
        DomainsGrid.ToolBarSettings.ShowRefreshButton = true;
    }
}

我将数据源绑定到使用我的控制器,如下所示。

return gridModel.DomainsGrid.DataBind(hmEntity.DomainProducts);

在上面的模型中,我如何从我的客户端表中引入 ClientName ,而不是我的 ClientId

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望能够定义使用对象属性的属性的列。

假设您有一个名为Client的Client类型的属性,您希望能够执行以下操作:

DataField = "Client.ClientName"

不幸的是,这似乎不起作用。可能有不同的符号可用于此,但在遇到此场景时我找不到任何文档。

为了解决这个问题,并且以弄脏模型为代价,我选择添加一个属性来支持网格。这是在我的“技术债务”清单上,我希望在我支付回报时找到更好的解决方案。

如果您想承受同样的负担:),请将此添加到您的DomainProduct类中(再次假设您有一个Client属性):

[NotMapped]
public string ClientName
{
    get { return Client == null ? "" : Client.ClientName; }
}

然后只使用ClientName作为DataField值。