嗨,我正在使用GXT 2.2.3创建可编辑网格。我创建了如下列:
List<String> eventList=new ArrayList<String>();
eventList.add("Mark/Modify Attendance");
eventList.add("Remove Attendance");
eventList.add("Modify Roster");
eventList.add("Mark OD");
eventList.add("Forgot To Checkin");
eventcombo = new SimpleComboBox<String>();
eventcombo.setEmptyText("");
eventcombo.setTriggerAction(TriggerAction.ALL);
// EventCombo.setSelection(eventList);
CellEditor eventComboEditor = new CellEditor(eventcombo) {
public Object preProcessValue(Object value) {
if (value == null) {
return value;
}
return eventcombo.findModel(value.toString());
}
public Object postProcessValue(Object value) {
if (value == null) {
return value;
}
return ((ModelData) value).get("value");
}
};
eventcombo.setForceSelection(true);
eventcombo.setEmptyText("");
eventcombo.setTriggerAction(TriggerAction.ALL);
eventcombo.add(eventList);
ColumnConfig eventcolumn = new ColumnConfig();
eventcolumn.setId("event");
eventcolumn.setHeader("Event");
eventcolumn.setWidth(145);
eventcolumn.setMenuDisabled(true);
eventcolumn.setSortable(false);
/* */
// column.setEditor(new);
eventcolumn.setEditor(eventComboEditor);
configs.add(eventcolumn);
//rosterInOut-10
ColumnConfig rosterInOutcolumn = new ColumnConfig();
rosterInOutcolumn.setId("rosterInOut");
rosterInOutcolumn.setHeader("Old Roster");
rosterInOutcolumn.setWidth(70);
rosterInOutcolumn.setMenuDisabled(true);
rosterInOutcolumn.setSortable(false);
configs.add(rosterInOutcolumn);
Rostercombo = new SimpleComboBox<String>();
CellEditor editor1 = new CellEditor(Rostercombo) {
public Object preProcessValue(Object value) {
if (value == null) {
return value;
}
return Rostercombo.findModel(value.toString());
}
public Object postProcessValue(Object value) {
if (value == null) {
return value;
}
return ((ModelData) value).get("value");
}
};
Rostercombo.setForceSelection(true);
Rostercombo.setTriggerAction(TriggerAction.ALL);
Rostercombo.add("OD");
Rostercombo.add("O");
//newRosterin-11
ColumnConfig newRosterincolumn = new ColumnConfig();
newRosterincolumn.setId("newRosterin");
newRosterincolumn.setHeader("New Roster In");
newRosterincolumn.setWidth(80);
newRosterincolumn.setEditor(editor1);
newRosterincolumn.setMenuDisabled(true);
newRosterincolumn.setSortable(false);
configs.add(newRosterincolumn);
//checkinout-12
ColumnConfig checkinoutcolumn = new ColumnConfig();
checkinoutcolumn.setId("checkinout");
checkinoutcolumn.setHeader("Check In-Out");
checkinoutcolumn.setWidth(80);
checkinoutcolumn.setMenuDisabled(true);
checkinoutcolumn.setSortable(false);
configs.add(checkinoutcolumn);
//checkinDate-13
ColumnConfig checkinDatecolumn = new ColumnConfig();
checkinDatecolumn.setId("checkinDate");
checkinDatecolumn.setHeader("Check In Date");
checkinDatecolumn.setWidth(85);
checkinDatecolumn.setMenuDisabled(true);
checkinDatecolumn.setSortable(false);
final DateField dateField1 = new DateField();
dateField1.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MMM/yyyy"));
dateField1.getDatePicker().addListener(Events.Select, new Listener<DatePickerEvent>() {
@Override
public void handleEvent(DatePickerEvent dpe) {
// Window.alert("Getting Roster Date here-->"+grid.getColumnModel().);
Window.alert("Getting RosterDate--."+ caseStoreModule.getModifiedRecords().get(0).get("rosterDate"));
}
});
checkinDatecolumn.setEditor(new CellEditor(dateField1));
checkinDatecolumn.setDateTimeFormat(DateTimeFormat.getFormat("dd/MMM/yyyy"));
configs.add(checkinDatecolumn);
//checkinTime-14
ColumnConfig checkinTimecolumn=new ColumnConfig();
checkinTimecolumn.setId("checkinTime");
checkinTimecolumn.setHeader("Check In Time");
checkinTimecolumn.setWidth(80);
checkinTimecolumn.setMenuDisabled(true);
checkinTimecolumn.setSortable(false);
final TextField<String> checkintime = new TextField<String>();
checkintime.setAllowBlank(true);
checkintime.addListener(Events.Change, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
// Window.alert("getting the checkin time value-->"+checkintime.getValue());
String variable = checkintime.getRawValue();
if(variable != null & !variable.equalsIgnoreCase(""))
{
if(!variable.matches(REG_EXP))
{
checkintime.clear();
MsgBox.info("Enter time in hh:mm format");
checkintime.focus();
return;
}
}
}
});
checkinTimecolumn.setEditor(new CellEditor(checkintime));
configs.add(checkinTimecolumn);
//checkoutDate-15
ColumnConfig checkoutDatecolumn=new ColumnConfig();
checkoutDatecolumn.setId("checkoutDate");
checkoutDatecolumn.setHeader("Check Out Date");
checkoutDatecolumn.setWidth(90);
checkoutDatecolumn.setMenuDisabled(true);
checkoutDatecolumn.setSortable(false);
DateField dateField2 = new DateField();
dateField2.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MMM/yyyy"));
checkoutDatecolumn.setEditor(new CellEditor(dateField2));
checkoutDatecolumn.setDateTimeFormat(DateTimeFormat.getFormat("dd/MMM/yyyy"));
configs.add(checkoutDatecolumn);
//checkoutTime-15
ColumnConfig checkoutTimecolumn=new ColumnConfig();
checkoutTimecolumn.setId("checkoutTime");
checkoutTimecolumn.setHeader("Check Out Time");
checkoutTimecolumn.setWidth(90);
checkoutTimecolumn.setMenuDisabled(true);
checkoutTimecolumn.setSortable(false);
final TextField<String> checkouttime = new TextField<String>();
checkouttime.setAllowBlank(true);
checkouttime.addListener(Events.Change, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
// Window.alert("getting the checkouttime value-->"+checkouttime.getValue());
String variable = checkouttime.getRawValue();
if(variable != null & !variable.equalsIgnoreCase(""))
{
if(!variable.matches(REG_EXP))
{
checkouttime.clear();
MsgBox.info("Enter time in hh:mm format");
checkouttime.focus();
return;
}
}
}
});
checkoutTimecolumn.setEditor(new CellEditor(checkouttime));
configs.add(checkoutTimecolumn);
//for gradeCode-16
ColumnConfig gradeCodecolumn=new ColumnConfig();
gradeCodecolumn.setId("gradeCode");
gradeCodecolumn.setHidden(true);
configs.add(gradeCodecolumn);
//for rosterevent-17
ColumnConfig rostereventcolumn=new ColumnConfig();
rostereventcolumn.setId("rosterevent");
rostereventcolumn.setHidden(true);
configs.add(rostereventcolumn);
//for action-18
ColumnConfig actioncolumn=new ColumnConfig();
actioncolumn.setId("action");
actioncolumn.setHeader("Action");
//column.setHidden(true);
actioncolumn.setWidth(70);
actioncolumn.setMenuDisabled(true);
actioncolumn.setSortable(false);
configs.add(actioncolumn);
//for actionHidden-19
ColumnConfig actionHiddencolumn=new ColumnConfig();
actionHiddencolumn.setId("actionHidden");
actionHiddencolumn.setHidden(true);
configs.add(actionHiddencolumn);
//for attendId-20
ColumnConfig attendIdcolumn=new ColumnConfig();
attendIdcolumn.setId("attendId");
attendIdcolumn.setHidden(true);
configs.add(attendIdcolumn);
//for rosterChanged-21
ColumnConfig rosterChangedcolumn=new ColumnConfig();
rosterChangedcolumn.setId("rosterChanged");
rosterChangedcolumn.setHidden(true);
configs.add(rosterChangedcolumn);
// for holiday-22
ColumnConfig holidaycolumn=new ColumnConfig();
holidaycolumn.setId("holiday");
holidaycolumn.setHidden(true);
configs.add(holidaycolumn);
// for checkinDateTimeHidden-23
column=new ColumnConfig();
column.setId("checkinDateTimeHidden");
column.setHidden(true);
configs.add(column);
// for checkoutDateTimeHidden-24
ColumnConfig checkoutDateTimeHiddencolumn=new ColumnConfig();
checkoutDateTimeHiddencolumn.setId("checkoutDateTimeHidden");
checkoutDateTimeHiddencolumn.setHidden(true);
configs.add(checkoutDateTimeHiddencolumn);
// for loginEmpEntity-25
ColumnConfig loginEmpEntitycolumn=new ColumnConfig();
loginEmpEntitycolumn.setId("loginEmpEntity");
loginEmpEntitycolumn.setHidden(true);
configs.add(loginEmpEntitycolumn);
// for halfDayLLimit-26
ColumnConfig halfDayLLimitcolumn=new ColumnConfig();
halfDayLLimitcolumn.setId("halfDayLLimit");
halfDayLLimitcolumn.setHidden(true);
configs.add(halfDayLLimitcolumn);
return new ColumnModel(configs);
现在,我想根据eventCombo框值的值,将checkinDate,CheckIntime,CheckOutDate和CheckOutTime列单元格设置为不可编辑或禁用。
如何在eventCombo的侦听器框中进行此操作。请提出建议。
我是GXT的新手。
更新
我尝试了下面的代码来禁用和启用单元格,但是它禁用了单元格。但是,禁用后,如果我选择了另一个,它就不会再次启用。
侦听器> gridAfterEditListener =新侦听器>(){
@Override
public void handleEvent(GridEvent<AttendanceCaseCreationModel> be) {
AttendanceCaseCreationModel data = be.getModel();
String val = data.get("event");
if(val.equalsIgnoreCase("Remove Attendance")){
data.set("checkinDate","");
grid.getColumnModel().getColumnById("checkinDate").getEditor().disable();
grid.getStore().update(data);
grid.getView().refresh(true);
}
else {
data.set("checkinDate","");
grid.getColumnModel().getColumnById("checkinDate").getEditor().enable();
grid.getStore().update(data);
grid.getView().refresh(true);
}
}
};
grid.addListener(Events.AfterEdit, gridAfterEditListener);
请提出解决方法的建议
与其考虑禁用和启用该单元,不如使用CSS隐藏和显示该单元。以下是我的代码,可以节省我一些时间。
GridCellRenderer<AttendanceCaseCreationModel> checkinRenderer=new GridCellRenderer<AttendanceCaseCreationModel>() {
@Override
public Object render(AttendanceCaseCreationModel model, String property,
ColumnData config, int rowIndex, int colIndex,
ListStore<AttendanceCaseCreationModel> store,
Grid<AttendanceCaseCreationModel> grid) {
String color="pink";
if(eventcombo.getValue()!=null){
if(eventcombo.getRawValue().equalsIgnoreCase("Forgot To Checkin") ||
eventcombo.getRawValue().equalsIgnoreCase("Mark/Modify Attendance")){
color="pink";
}
else{
config.style=config.style+ ";visibility: hidden;";
}
}
config.style=config.style+ ";background-color:" + color + ";";
config.style=config.style+ ";display: block;";
Object value = model.get(property);
return value;
}
};
问题内容: 有什么办法可以在jtable中动态制作不可编辑的单元格吗?每当用户提供类似false的输入时,我都想创建不可编辑的单元格…我已经在DefaultTableModel isCellEditable方法中看到过,但是如果我想使用它,则每次创建新对象时都会创建它,因此我想动态更改它为不可编辑。有人可以帮我吗?。谢谢 问题答案: 其他班级 然后,您可以通过使用存储的myModel变量并在其上调
我有一个表视图,其中很少有列是可编辑的,也很少有不可编辑的。当我在第一列中输入一些值并按tab键时,将调用一个服务,返回的对象将映射到表行。我的要求是根据返回对象中的标志将不可编辑列设置为可编辑(仅在我编辑过的行中)。下面是调用服务并将返回的对象设置为行的代码。 请建议如何在运行时根据标志将不可编辑的列转换为可编辑的列。
问题内容: 我想在JTable中将不可编辑的单元格显示为灰色。我正在使用这样的TableCellRenderer: 这有效,但有一个令人讨厌的伪像:最初,“复选框”是“左排列的”,当我按鼠标左键时,它移到“居中”,而当我释放鼠标按钮时,它又移回“左排列”。 如何避免这种令人讨厌的伪像,并且可能对我的问题有更好的简单解决方案? 问题答案: 返回的实例中。 附录:从美学角度,你可能想调理渲染的和基于编
我有一个剑道网格,根据第一列中的值,COR ABA编号可以编辑也可以不编辑。因此,如果NOC代码=='C01',则COR ABA编号可编辑,否则不可编辑。 我通过在列和编辑处理程序中添加编辑事件来实现这一点,在不允许编辑的情况下,禁用HTML输入Kendo创建。(在栅格定义中,我有可编辑(true)开始)。我希望通过在网格的数据绑定事件中执行逻辑检查来实现这一点。也就是说,在绑定所有数据后,迭代数
问题内容: 我的折扣列有一个自动完成功能,其值来自另一个json变量。 这是我的json数组,折扣数据来自此数组。 What I would like to do is (1)更改折扣值后,“ 费用”列应 根据此公式进行更改 值0.145来自json的id列。 (2)在更改折价后,ExtCost列应 据此更改。 数量是最左侧的单元格。 这是我的网格相关代码。 问题答案: 您没有提供有效的演示,但希
我需要JavaFX tableView的可编辑单元格。默认的TextFieldTableCell要求用户按enter提交更改。我认为一个典型的用户期望在单元格外单击时保留更改。我想要的所有功能包括: 单击选择单元格并 在选定的单元格中单击另一个单元格,或回车,开始编辑。 双击单元格开始编辑。 按enter提交对单元格的更改 在单元格之外的任何地方更改鼠标焦点都将向单元格提交更改 我在这篇文章中发现