我的任务是:一个带有列的数据绑定 ListGrid。此列的标题应为“{ infoDate
in format DD-MM-YYYY} 的信息”+ 一个 DateItem(仅限图标选择器),用户可以从中修改infoDate
默认为当前日期的日期。根据所选日期,列中的值会发生变化。
因此,我从这个问题How to add button in HeaderSpan of SmartGWT中获得了一个想法,以访问下面的代码。不幸的是,有一个问题: DateItem 似乎不可点击,它看起来就像一张图片。此外,我无法删除 TextField,它是一个文本字段或 3 个可选选项字段。
我建议采用 innerHTML 不采用选择器本身的功能,因为我尝试使用 Calendar、DateChooser 和 DatePicker 并且它有效,但问题在于视图(我只需要打开 DatePicker onClick 的日历图标)。
提前感谢您的任何帮助或想法!
进口:
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
import com.smartgwt.client.widgets.events.DrawEvent;
import com.smartgwt.client.widgets.events.DrawHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
编码:
ListGrid infoTable = new ListGrid();
infoTable.setShowRecordComponents(true);
infoTable.setShowRecordComponentsByCell(true);
infoTable.setWidth100();
infoTable.setDataSource(dataSource);
infoTable.setCanEdit(false);
infoTable.setCanCollapseGroup(false);
infoTable.setCanFreezeFields(false);
infoTable.setCanGroupBy(false);
infoTable.setCanMultiSort(false);
infoTable.setCanSort(false);
infoTable.setCanResizeFields(false);
infoTable.setAutoFetchData(false);
infoTable.addDrawHandler(new DrawHandler() {
public void onDraw(final DrawEvent event) {
for (Element element : DOMUtils.getElementsByTagName("td")) {
if (element.getInnerHTML().startsWith("Information for")) {
DOMUtils.removeAllChildNodes(element);
final DynamicForm cal = new DynamicForm();
final DateItem infoDate = new DateItem();
infoDate.setDefaultValue(new Date());
infoDate.setTitle(“Information for ”);
infoDate.setTitleAlign(Alignment.LEFT);
infoDate.setWrapTitle(false);
infoDate.setDisplayFormat(DateDisplayFormat.TOEUROPEANSHORTDATE);
infoDate.setUseTextField(true);
infoDate.setAlign(Alignment.RIGHT);
infoDate.addChangedHandler(new ChangedHandler() {
public void onChanged(final ChangedEvent event) {
//fetch new data, according to the date selected);
}
});
cal.setFields(infoDate);
element.setInnerHTML(cal.getInnerHTML());
}
}
// fetch data from DataSource class
infoTable.fetchData();
}
});
还有DOMUtils类:
class DOMUtils {
public static void removeAllChildNodes(Element element) {
NodeList<Node> childList = element.getChildNodes();
for(int childIndex = 0; childIndex < childList.getLength(); childIndex++) {
element.removeChild(childList.getItem(childIndex));
}
}
public static Element[] getElementsByTagName(String tagName)
{
JavaScriptObject elements = getElementsByTagNameInternal(tagName);
int length = getArrayLength(elements);
Element[] result = new Element[length];
for (int i=0; i<length; i++)
{
result[i] = getArrayElement(elements, i);
}
return result;
}
private static native JavaScriptObject getElementsByTagNameInternal(String tagName)/*-{
return $doc.getElementsByTagName(tagName);
}-*/;
private static native int getArrayLength(JavaScriptObject array)/*-{
return array.length;
}-*/;
private static native Element getArrayElement(JavaScriptObject array, int position)/*-{
return (position>=0 && position<array.length?array[position]:null);
}-*/;
}