【问题标题】:dojo.data.ItemFileReadStore + dojox.grid.DataGrid + 100% width and heightdojo.data.ItemFileReadStore + dojox.grid.DataGrid + 100% 宽度和高度
【发布时间】:2011-01-14 08:01:09
【问题描述】:

我想要一个带有 dojo.data.ItemFileReadStore 作为数据存储的 dojox.grid.DataGrid。我希望它填满整个屏幕。我不想以像素为单位指定尺寸。我见过的所有示例都以像素为单位指定它们或使用 CSV 数据存储。我尝试使用 HTML 元素和 javascript 来设置数据网格和存储。

有人做过吗?有错误吗?这似乎是任何人都想要的,但也许由于某种原因是不可能的。有任何想法吗?谢谢!

编辑以插入代码:

<div id="gridContainer" style="width: 100%; height: 100%;"></div>

<div id="gridContainer1" style="width: 400px; height: 200px;"></div>


<script type="text/javascript">

    dojo.addOnLoad(function(){
        // our test data store for this example:
        var jsonStore = new dojo.data.ItemFileReadStore({
            url: '/mydata.json'
        });

        var layout = [{
            field: 'id',
            name: 'id',
            width: '20px'
        },
        {
            field: 'name',
            name: 'name',
            width: '50px'
        },
        {
            field: 'owner',
            name: 'owner',
            width: '50px'
        }];

        // create a new grid:
        var grid = new dojox.grid.DataGrid({
            query: {
            rowid: '*'
            },
            store: jsonStore,
            clientSort: true,
            rowSelector: '20px',
            structure: layout
        },
        document.createElement('div'));

        dojo.byId("gridContainer1").appendChild(grid.domNode);

        grid.startup();
    });
</script>

根据我使用的是gridContainer还是gridContainer1,它不显示或分别显示网格。

什么给了?

【问题讨论】:

    标签: json datagrid dojo


    【解决方案1】:

    是的 - 完全有可能。 1)页面布局是布局小部件(ContentPane,StackContainer,BorderContainer,TabContainer ...)的责任网格能够参与布局,但您应该将其真正放置在旨在进行布局的容器中。

    2) 程序化创作可以通过以下方式实现:

    var layout = [{
        name: "MyFirstColumnHeader",
        field: 'someColumnNameInMyData',
        width: "180px;"
      },
      {
        name: "MySecondColumnHeader",
        field: 'someOtherColumnName',
        width: "180px;"
      }
    ];
    
    var emptyData = {
      identifier: 'uniqueIdOfEachItem',
      label: 'displayName',
      items: []
    };
    var store = new dojo.data.ItemFileWriteStore({
      data: emptyData
    });
    var grid = new dojox.grid.DataGrid({
      id: 'myGrid',
      query: {
        uniqueIdOfEachItem: '*'
      },
      store: store,
      structure: layout
    }, gridPlaceholder);
    grid.startup();
    

    在哪里

    MyFirstColumnHeader 是您希望在第一列标题中显示的文本

    someColumnInMyData 是要显示的数据中的对象属性或“列”

    gridPlaceholder 是页面上的一个 div 用于放置网格(只需在 ContentPane 中添加一个空 div 并将 ContentPane 的样式设置为 width : 100%, height : 100%

    uniqueIdOfEachItem 是每个显示项目的属性,将它们标记为唯一,例如他们的主键或 ID 属性

    此示例创建一个读/写存储并具有简单的布局,但 dojo 文档应该能够帮助处理更复杂的示例。

    【讨论】:

    • 嗨,安迪,感谢您的解释。只是为了确认:列没有默认宽度?如果我通过“布局”指定它们,那么我可以将我的容器元素指定为 100% 宽和 100% 高(不是双关语)。现在我确实有一个容器元素,但奇怪的是,如果我为定义 dojo.data.ItemFileReadStore 的 div 指定宽度,而不是容器,那么影响宽度的因素似乎是。我的网格列是动态的。数量及其内容由数据库中的数据确定。因此,如果我为每个指定相同的宽度,我想这很好。我试试看。
    • 我编辑了我的问题以包含我的代码示例。我也试过没有 document.createElement('div') 和 dojo.byId("gridContainer").appendChild(grid.domNode)。还是同样的问题。具有百分比尺寸的容器 div 不显示任何内容。而容器 div 像素尺寸显示了一切。另外我发现奇怪的另一件事是 span 元素可以与 csv 数据存储一起使用,但不能与 json 一起使用。我正在为我的商店指定一个“网址”。我不热衷于通过 javascript 重新创建它。
    • 好像宽度可以是100%——不是像素值,但是高度必须是像素值。
    • 这确实是一个 CSS/HTML 问题。 ContentPane 的父元素必须有一个值 - 甚至是 100%。所以body元素也必须有100%的值,这样会弄乱很多margin之类的。看起来我将不得不重建我的应用程序的布局才能使用它。感谢您的帮助,安迪。
    • 我的单页 RIA 使用:
      其中 css 有: .app { width:100%;高度:100%;溢出:隐藏;填充:0;边距:0;您可以为包含的元素添加填充和边距,但上面是一个非常标准的单页容器 div。在标记中,您可以添加一个 ContainerPane 并将其样式设置为宽度和高度 100%,然后在创建网格时执行:
      并使用我之前提到的代码。
    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 2015-02-04
    • 2013-11-09
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2013-07-14
    相关资源
    最近更新 更多