gpt4 book ai didi

gwt - 如何使 GWT Datagrid 的第一列固定并水平和垂直滚动

转载 作者:行者123 更新时间:2023-12-01 02:34:25 25 4
gpt4 key购买 nike

当前 GET DataGrid 标题在垂直滚动期间使用固定标题行执行此技巧。有没有办法在整个(第一)列上实现相同的目标?

最佳答案

我已经实现了卡住 DataGrid 中第一列的 ScrolledGrid。您需要使用它而不是 DataGrid 来卡住第一列。

import com.google.gwt.dom.client.*;
import com.google.gwt.event.dom.client.ScrollEvent;
import com.google.gwt.event.dom.client.ScrollHandler;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.client.ui.HeaderPanel;
import com.google.gwt.user.client.ui.ScrollPanel;

/**
*
* @author Yuri Plaksyuk
*/
public class ScrolledGrid extends DataGrid {

private final Text cssText;
private boolean addedClass = false;
private int currentScrollLeft = 0;

public ScrolledGrid() {
cssText = Document.get().createTextNode("");

StyleElement styleElement = Document.get().createStyleElement();
styleElement.setType("text/css");
styleElement.appendChild(cssText);

HeaderPanel headerPanel = (HeaderPanel) getWidget();
headerPanel.getElement().insertFirst(styleElement);

final ScrollPanel scrollPanel = (ScrollPanel) headerPanel.getContentWidget();
scrollPanel.addScrollHandler(new ScrollHandler() {

@Override
public void onScroll(ScrollEvent event) {
int scrollLeft = scrollPanel.getHorizontalScrollPosition();
if (scrollLeft != currentScrollLeft) {
StringBuilder css = new StringBuilder();
if (scrollLeft > 0) {
css.append(".ScrolledGrid-frozen {");
css.append("background-color: inherit;");
css.append("}");

css.append(".ScrolledGrid-frozen div {");
css.append("position: absolute;");
css.append("left: ").append(scrollLeft).append("px;");
css.append("width: ").append(getColumnWidth(getColumn(0))).append(";");
css.append("padding-left: 1.3em;");
css.append("padding-right: 0.5em;");
css.append("margin-top: -0.7em;");
css.append("white-space: nowrap;");
css.append("background-color: inherit;");
css.append("}");
}
else
css.append(".ScrolledGrid-frozen { }");

css.append("th.ScrolledGrid-frozen { background-color: white; }");

cssText.setData(css.toString());


if (!addedClass) {
NodeList<TableRowElement> rows;
TableRowElement row;
TableCellElement cell;

rows = getTableHeadElement().getRows();
for (int i = 0; i < rows.getLength(); ++i) {
row = rows.getItem(i);
cell = row.getCells().getItem(0);
cell.setInnerHTML("<div>" + cell.getInnerHTML() + "</div>");
cell.addClassName("ScrolledGrid-frozen");
}

rows = getTableBodyElement().getRows();
for (int i = 0; i < rows.getLength(); ++i) {
row = rows.getItem(i);
cell = row.getCells().getItem(0);

cell.addClassName("ScrolledGrid-frozen");
}
addedClass = true;
}

currentScrollLeft = scrollLeft;
}
}
});
}
}

不幸的是,一些 CSS 值是硬编码的。

关于gwt - 如何使 GWT Datagrid 的第一列固定并水平和垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com