如何在Jqgrid中显示间接数据

2024-01-03

我正在我的 ASP.net MVC Web 应用程序中实现 Jqgrid。我有这样的数据:

 SID SNAME CITY
  1   ABC   11
  2   XYZ   12
  3   ACX   13
  4   KHG   14
  5   ADF   15
  6   KKR   16

和另一张桌子

 CID   CNAME

  11   Chennai   
  12   Mumbai
  13   Delhi   like this

但是,在网格中我想这样显示:

  SID SNAME  City
  1   ABC   Chennai
  2   XYZ   Mumbai
  3   ACX   Delhi
  4   KHG   Banglore
  5   ADF   Hyderabad
  6   KKR   Kolkatta

我无法使用 join 因为类结构如下:

 Class Student

{
   long sid,
   string sname,
   long city
}

所以,当我从数据库中读取数据时,我得到的是城市 ID,而不是城市名称。

但是,我想在网格数据中向最终用户显示城市名称而不是城市 ID

我需要一些类似的东西lookup函数,以便在将数据绑定到jQgrid之前,城市id将与城市名称映射并显示它而不是显示ID

我没有找到办法来完成这件事。

请帮忙..

The controller method i am using is as follows:


public JsonResult Students()
    {
        List<Students> liStudents = new  List<Students>();
        SortedList<long, string> slLocations = new SortedList<long, string>();
        slLocations = Students.LoadLocations();
        liStudents = Students.GetStudents();
        return Json(liStudents,JsonRequestBehavior.AllowGet);
    }

如何修改 return 语句以在 json 响应中也抛出 slLocations


我之前已经回答过封闭的问题(参见here https://stackoverflow.com/a/17410568/315935)。尽管如此,我还是决定详细回答你的问题,因为你描述的问题确实很常见。

我首先提醒一下 jqGrid 提供了formatter: "select"它使用formatoptions.value or editoptions.value将 id 解码为文本。这formatter: "select" uses value和可选的separator, delimiter and defaultValue属性,但不能使用编辑选项.dataUrl http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editoptions从服务器获取所需数据而不是静态使用value。问题很简单:处理dataUrl works 异步,但在格式化网格体的列时不支持延迟填充。所以要使用formatter: "select" one have to set formatoptions.value or editoptions.value before服务器响应将由 jqGrid 处理。

In 旧答案 https://stackoverflow.com/a/17410568/315935我建议使用附加数据扩展从服务器返回的 JSON 响应editoptions.value的列有formatter: "select"。我建议设置beforeProcessing。例如,可以生成以下格式的服务器响应:

{
    "cityMap": {"11": "Chennai", "12": "Mumbai", "13": "Delhi"},
    "rows": [
        { "SID": "1",  "SNAME": "ABC", "CITY": "11" },
        { "SID": "2",  "SNAME": "XYZ", "CITY": "12" },
        { "SID": "3",  "SNAME": "ACX", "CITY": "13" },
        { "SID": "4",  "SNAME": "KHG", "CITY": "13" },
        { "SID": "5",  "SNAME": "ADF", "CITY": "12" },
        { "SID": "6",  "SNAME": "KKR", "CITY": "11" }
    ]
}

并使用以下 jqGrid 选项

colModel: [
    {name: "SNAME", width: 250},
    {name: "CITY", width: 180, align: "center"}
],
beforeProcessing: function (response) {
    var $self = $(this);
    $self.jqGrid("setColProp", "CITY", {
        formatter: "select",
        edittype: "select",
        editoptions: {
            value: $.isPlainObject(response.cityMap) ? response.cityMap : []
        }
    });
},
jsonReader: { id: "SID"}

The demo http://www.ok-soft-gmbh.com/jqGrid/UsageFormetterSelect0.htm演示了该方法。它显示

人们可以使用相同的方法动态设置任何列选项。例如可以使用

{
    "colModelOptions": {
        "CITY": {
            "formatter": "select",
            "edittype": "select",
            "editoptions": {
                "value": "11:Chennai;13:Delhi;12:Mumbai"
            },
            "stype": "select",
            "searchoptions": {
                "sopt": [ "eq", "ne" ],
                "value": ":Any;11:Chennai;13:Delhi;12:Mumbai"
            }
        }
    },
    "rows": [
        { "SID": "1",  "SNAME": "ABC", "CITY": "11" },
        { "SID": "2",  "SNAME": "XYZ", "CITY": "12" },
        { "SID": "3",  "SNAME": "ACX", "CITY": "13" },
        { "SID": "4",  "SNAME": "KHG", "CITY": "13" },
        { "SID": "5",  "SNAME": "ADF", "CITY": "12" },
        { "SID": "6",  "SNAME": "KKR", "CITY": "11" }
    ]
}

以及以下 JavaScript 代码

var filterToolbarOptions = {defaultSearch: "cn", stringResult: true, searchOperators: true},
    removeAnyOption = function ($form) {
        var $self = $(this), $selects = $form.find("select.input-elm");
        $selects.each(function () {
            $(this).find("option[value='']").remove();
        });
        return true; // for beforeShowSearch only
    },
    $grid = $("#list");

$.extend($.jgrid.search, {
    closeAfterSearch: true,
    closeAfterReset: true,
    overlay: 0,
    recreateForm: true,
    closeOnEscape: true,
    afterChange: removeAnyOption,
    beforeShowSearch: removeAnyOption
});

$grid.jqGrid({
    colModel: [
        {name: "SNAME", width: 250},
        {name: "CITY", width: 180, align: "center"}
    ],
    beforeProcessing: function (response) {
        var $self = $(this), options = response.colModelOptions, p,
            needRecreateSearchingToolbar = false;
        if (options != null) {
            for (p in options) {
                if (options.hasOwnProperty(p)) {
                    $self.jqGrid("setColProp", p, options[p]);
                    if (this.ftoolbar) { // filter toolbar exist
                        needRecreateSearchingToolbar = true;
                    }
                }
            }
            if (needRecreateSearchingToolbar) {
                $self.jqGrid("destroyFilterToolbar");
                $self.jqGrid("filterToolbar", filterToolbarOptions);
            }
        }
    },
    jsonReader: { id: "SID"}
});
$grid.jqGrid("navGrid", "#pager", {add: false, edit: false, del: false})
$grid.jqGrid("filterToolbar", filterToolbarOptions);

该演示使用了上面的代码。

如果任何选项动态更改,我们会重新创建搜索过滤器。该方式允许实施更灵活的解决方案。例如,服务器可以检测客户端(网络浏览器)的语言首选项,并基于该选项返回数字、日期等的格式选项。我相信每个人都可以提出其他有趣的场景。

再说一点。如果您在 select in (searchoptions.value and editoptions.value)我建议您不要使用字符串而不是对象作为值searchoptions.value and editoptions.value。它允许您指定命令选择元素中的项目数。

如果您选择的项目太多(例如您所在国家/地区的所有城市),那么您可以考虑使用select2 http://ivaynberg.github.io/select2/我在其中演示的插件答案 https://stackoverflow.com/a/19404013/315935。它简化了选项的选择,因为它转换了元素中的选择,这与 jQuery UI 自动完成非常接近。

下一个演示 http://www.ok-soft-gmbh.com/jqGrid/usageformetterselect2.htm演示使用select2 http://ivaynberg.github.io/select2/插入。如果单击搜索工具栏或搜索对话框的“选择”元素的下拉箭头,则会获得可用于快速搜索的附加输入字段。如果开始在输入框中键入一些文本(例如下图中示例中的“e”),选项列表将减少为将键入的文本作为子字符串的选项:

我个人觉得这种“选择搜索”控件非常实用。

顺便说一句,我在另一个答案 https://stackoverflow.com/a/16288582/315935如何设置colNames动态地。 In 可用于从服务器端管理更多信息。

UPDATED:对应控制器动作Students可以是关于以下内容

public class Student {
   public long SID { get; set; }
   public string SNAME { get; set; }
   public long CITY { get; set; }
}
public class City {
    public long CID { get; set; }
    public string CNAME { get; set; }
}
...
public class HomeController : Controller {
    ...
    public JsonResult Students () {
        var students = new List<Student> {
                new Student { SID = 1, SNAME = "ABC", CITY = 11 },
                new Student { SID = 2, SNAME = "ABC", CITY = 12 },
                new Student { SID = 3, SNAME = "ABC", CITY = 13 },
                new Student { SID = 4, SNAME = "ABC", CITY = 13 },
                new Student { SID = 5, SNAME = "ABC", CITY = 12 },
                new Student { SID = 6, SNAME = "ABC", CITY = 11 }
            };
        var locations = new List<City> {
                new City { CID = 11, CNAME = "Chennai"},
                new City { CID = 12, CNAME = "Mumbai"},
                new City { CID = 13, CNAME = "Delhi"}
            };
        // sort and concatinate location corresponds to jqGrid editoptions.value format
        var sortedLocations = locations.OrderBy(location => location.CNAME);
        var sbLocations = new StringBuilder();
        foreach (var sortedLocation in sortedLocations) {
            sbLocations.Append(sortedLocation.CID);
            sbLocations.Append(':');
            sbLocations.Append(sortedLocation.CNAME);
            sbLocations.Append(';');
        }
        if (sbLocations.Length > 0)
            sbLocations.Length -= 1; // remove last ';'
        return Json(new {
                   colModelOptions = new {
                       CITY = new {
                           formatter = "select",
                           edittype = "select",
                           editoptions = new {
                               value = sbLocations.ToString()
                           },
                           stype = "select",
                           searchoptions = new {
                               sopt = new[] { "eq", "ne" },
                               value = ":Any;" + sbLocations
                           }
                       }
                   },
                   rows = students    
               },
               JsonRequestBehavior.AllowGet);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Jqgrid中显示间接数据 的相关文章

随机推荐

  • 我试图在 MATLAB 中使用 LaTex 字符串作为轴标签,但无缘无故地得到一个数字

    我正在尝试使用 LaTex 字符串为 y 轴标签插入一个分数 我得到一个数字 采用标准字体和ylabel位置 以及我的预期 我试图插入的分数 当我编辑代码时 这对我来说已经改变了 但是当我尝试调查这个问题时就停止了 我输入的是 353 19
  • 没有 CSRF 代币的表单:有什么风险

    如果我不在表单中使用 csrf 令牌 我到底会面临哪些风险 我并不是在寻找简单的风险标签或名称 因为这些可能会令人困惑 我需要用简单的英语了解攻击者到底可以做什么以及只有在什么情况下他们才能做到这一点 CSRF 漏洞允许恶意用户 或网站 让
  • 将 JanusGraph 与 Solr 结合使用

    设置 JanusGraph 我在控制台中注意到以下内容 09 04 12 175 INFO ReflectiveConfigOptionLoader 173 Loaded and initialized config classes 10
  • 将 HTMLCollection 转换为数组的最有效方法

    除了迭代所述集合的内容并手动将每个项目推入数组之外 是否有更有效的方法将 HTMLCollection 转换为数组 var arr Array prototype slice call htmlCollection 使用 本机 代码将具有相
  • Apache poi 多行项目符号点可以工作,但不能多段落?

    使用 apache poi 库生成 Word 文档要点正在工作 但我尝试多个段落不起作用 我已粘贴在下面 我的java类代码 package samplebuller import java io FileInputStream impor
  • 如何在 PHP 中拆分字符串中的泰米尔字符

    如何拆分字符串中的泰米尔语字符 当我使用preg match all u str results 我得到字符 和 如何获得组合字符 和 我想你应该能够使用the grapheme extract功能 http php net manual
  • 实例替代IO的目的是什么?

    此实例似乎行为不正常 gt guard True lt gt guard False gt guard False lt gt guard False Exception user error mzero 有人可能会争辩说 这不会导致任何其
  • 用户界面问题:一种让 MDI 子项显示在任务栏中的方法?

    我希望得到您对以下问题的建议 我们正在为正在开发的 Windows 窗体应用程序研究不同的用户界面解决方案 我们得出的结论是 在我看来 最好的解决方案是单文档界面 就像 MS Word 那样 也就是说 每次我们创建一个新文档时 它将在一个新
  • 将我的应用程序与联系人集成

    我想将我的应用程序与联系人管理器集成 更确切地说 当我在手机中运行 联系人 应用程序 然后单击任何头像时 会出现一个弹出 快速联系人徽章 窗口 其中包含一些可供选择的应用程序 联系人 邮件等 我想在该位置添加我的应用程序 那可能吗 我希望能
  • 如何在 Jetpack Compose Desktop 中加载字体?

    在 Android 版 Jetpack Compose 中 您可以执行以下操作 val fontFamily FontFamily Font resId R font my font 400 regular weight FontWeigh
  • 将自定义 Forager 与 OptaPlanner 结合使用时的 XStream ForbiddenClassException

    我最近将 optaplanner 版本从版本 7 0 0 升级到版本 7 4 1 我使用在配置文件中声明的自定义 Forager 如下所示
  • Android 3d 动画,如 Google Now 启动器菜单动画

    我需要在这样的活动或片段之间制作动画 我用Android Api gt 14 http www youtube com watch v cNMqIv5Ocnk http www youtube com watch v cNMqIv5Ocnk
  • 通过 Web 保护文件:基于细粒度授权的文件访问

    我有一个员工可以上传文件的系统 有以下三种方式 以公共 私人或保护模式上传到我的帐户以公共 私人或保护模式上传至部门帐户以公共 私有或保护模式上传到组织帐户 其中公共对任何人都可见 私有仅对组或个人而言并且对组织中的任何人都受保护 组织的所
  • GNU sed、^ 和 $ 带有 |当第一个/最后一个字符匹配时

    当进行包含类似内容的替换时 如果第一个字符匹配 则 REGEXP 中的 sed 不匹配模式空间开头的空字符串 如果最后一个字符匹配 它也不匹配结尾 这是为什么 以下是一些使用的示例123作为输入 与 r选项 substitution exp
  • 二维矩阵中的范围更新和查询

    我没有场景 但问题就在这里 这简直让我发疯 有一个 nxn 布尔矩阵 最初所有元素均为 0 n 我不知道如何解决这个问题 任何帮助将不胜感激 显然每个查询的 O n 解决方案是不可行的 使用数字来排序修改的想法取自 Dukeling 的帖子
  • Chrome 80如何解码cookie

    我有一个用于打开和解密 Google Chrome cookie 的工作脚本 如下所示 decrypted win32crypt CryptUnprotectData enctypted cookie value None None Non
  • Facebook SDK 4.x 权限问题 iOS

    我想得到Feed用于登录用户的时间线 我有一个登录按钮 我向其传递读取权限 包括user posts 令人惊讶的是 Facebook 没有授予我此权限并且忽略了它 Code void viewDidLoad super viewDidLoa
  • Powershell计划任务“延迟任务”选项

    我需要使用 延迟任务 选项创建任务计划 1 分钟 我可以看到 PowerShell cmdlet New ScheduledTaskTrigger 有一个选项 RandomDelay 但我认为它无效 我在文档中也看不到其他选项 https
  • Android Javascript WebView

    我有一个应用程序 我的最小 API 是 16 我想在 Web 视图上评估一些 javascript 当我有 mWebView evaluateJavascript function 我收到一个编译错误 说这仅在 API 19 及更高版本中可
  • 如何在Jqgrid中显示间接数据

    我正在我的 ASP net MVC Web 应用程序中实现 Jqgrid 我有这样的数据 SID SNAME CITY 1 ABC 11 2 XYZ 12 3 ACX 13 4 KHG 14 5 ADF 15 6 KKR 16 和另一张桌子