我在项目中使用 jqGrid,宽度设置为 900px,所有网格的配置相同。
如果我有 4 列,每列都设置了宽度,并且选项 shrinkToFit
设置为 true,则列将拉伸(stretch)以适合 900 像素。
但是,如果我有第二个包含 14 列的网格,并且我为每个网格设置了宽度,则 jqGrid 将不会考虑该列的宽度,因为 shrinkToFit
设置为 true。如果我将其设置为 false,我就可以解决这个问题。但另一个问题又出现了。第一个网格现在每列的宽度为 150px,并且列不再拉伸(stretch)以适合网格。
问题: 有没有办法在不改变配置的情况下,在列宽度之和大于网格宽度时实现水平滚动条?
最佳答案
抱歉,但是很难理解您到底想要哪种行为。
首先,您必须决定您是否知道网格的列宽度最好,或者您想要对列进行缩放(拉伸(stretch)),并且列宽度将被解释为权重。如果您想要最后的行为,您应该选择默认设置 shrinkToFit: true
。在这种情况下,宽度值 100、200 和 300 与值 1、2 和 3 的含义完全相同。
我个人在实践中主要使用具有许多列的网格。因此,在小显示器上使用默认设置 shrinkToFit: true
会导致列的大量挤压。因此,人们实际上无法在网格上看到任何有用的信息。所以我更喜欢在这种情况下使用 shrinkToFit: false
。我知道哪个负责每列的像素宽度,并在网格创建期间将值设置为 width
。因此,拥有大显示器的用户可以直接看到所有最重要的信息。此外,我没有为网格指定任何宽度参数。如果需要,用户可以使用页面的滚动条。您的要求可能不同,应选择最适合您的值。
如果您仍然希望使用 shrinkToFit: true
,但确实使用其他宽度值作为网格所有宽度的总和,您还有一个选择。 您可以使用setGridWidth
方法。它有可选的第二个 bool 参数shrink
。使用带有一个参数的 setGridWidth
方法将根据网格的 shrinkToFit
选项的值进行收缩,但显式使用第二个 shrink
参数允许您在不收缩的情况下更改宽度。也许这就是您想要实现的。
我在 the answer 中描述了另一个选项。 jqGrid 没有任何方法允许将网格的某些列的宽度更改为新值。在答案中,我描述了解决方法(请参阅答案中的 resizeStop
回调的代码),它使用内部 dragEnd
方法来更改列宽度。该演示将用于子网格,但可以对每个网格使用相同的方法。
关于javascript - jqGrid根据列数动态shrinkToFit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464350/